package async_log
Logging library built on top of Async_unix
Install
Dune Dependency
Authors
Maintainers
Sources
v0.17.0.tar.gz
sha256=2dae248d74c23aa6a1e0bc38d5b34c975eb4dfbdf32f0970641b5befd8385720
doc/src/async_log.kernel/log.ml.html
Source file log.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
open! Core open! Async_kernel open! Import include Raw_log (* This implementation file mainly includes helper functions for specific message formats. The core logging functionality, independent of format, etc., is in [Raw_log]. *) let sexp_of_t (_ : t) = Sexp.Atom "<opaque>" let async_trace_hook = ref None let message t msg = if would_log t (Message.level msg) then push_message_event t (Message_event.of_serialized_message msg) ;; let message_event t msg = if would_log t (Message_event.level msg) then push_message_event t msg ;; let push_message_event t data source ~level ~time ~ = let time = Option.value_or_thunk time ~default:(fun () -> Synchronous_time_source.now (get_time_source t) |> Time_ns.to_time_float_round_nearest) in let = Option.value legacy_tags ~default:[] in let async_trace_span = match !async_trace_hook with | None -> None | Some hook -> hook () in Message_event.Private.create data source ~level ~time ~legacy_tags ~user_scope:None ~function_name:None ~async_trace_span |> push_message_event t ;; let push_message t msg ~level ~time ~ = push_message_event t msg (Manually_constructed "from async log") ~level ~time ~legacy_tags:tags ;; let sexp ?level ?time ? t sexp = if would_log t level then push_message t (`Sexp sexp) ~level ~time ~tags ;; let string ?level ?time ? t s = if would_log t level then push_message t (`String s) ~level ~time ~tags ;; let structured_message ?level ?time ? t data source = if would_log t level then push_message_event t data source ~level ~time ~legacy_tags:tags ;; let printf ?level ?time ? t fmt = if would_log t level then ksprintf (fun msg -> push_message t (`String msg) ~level ~time ~tags) fmt else ifprintf () fmt ;; let = let uuid = match Base.Exported_for_specific_uses.am_testing with | true -> Uuid.Stable.V1.for_testing | false -> Uuid.create_random Random.State.default in ("Log.surround_id", Uuid.to_string uuid) :: tags ;; let surround_s_gen ?( = []) ~try_with ~map_return ~(log_sexp : ?tags:(string * string) list -> Sexp.t -> unit) ~f msg = let = add_uuid_to_tags tags in log_sexp ~tags [%message "Enter" ~_:(msg : Sexp.t)]; map_return (try_with f) ~f:(function | Ok x -> log_sexp ~tags [%message "Exit" ~_:(msg : Sexp.t)]; x | Error exn -> log_sexp ~tags [%message "Raised while " ~_:(msg : Sexp.t) (exn : exn)]; Exn.reraise exn (sprintf !"%{sexp:Sexp.t}" msg)) ;; let surroundf_gen ?( = []) ~try_with ~map_return ~(log_string : ?tags:(string * string) list -> string -> unit) = ksprintf (fun msg f -> let = add_uuid_to_tags tags in log_string ~tags ("Enter " ^ msg); map_return (try_with f) ~f:(function | Ok x -> log_string ~tags ("Exit " ^ msg); x | Error exn -> log_string ~tags ("Raised while " ^ msg ^ ":" ^ Exn.to_string exn); Exn.reraise exn msg)) ;; let surround_s ~on_subsequent_errors ?level ?time ? t msg f = surround_s_gen ?tags ~try_with:(Monitor.try_with ~run:`Schedule ~rest:on_subsequent_errors) ~map_return:Deferred.map ~log_sexp:(fun ? s -> sexp ?tags ?level ?time t s) ~f msg ;; let surroundf ~on_subsequent_errors ?level ?time ? t fmt = surroundf_gen ?tags ~try_with:(Monitor.try_with ~run:`Schedule ~rest:on_subsequent_errors) ~map_return:Deferred.map ~log_string:(fun ? -> string ?tags ?level ?time t) fmt ;; let set_level_via_param_helper ~f = let open Command.Param in map (flag "log-level" (optional Level.arg) ~doc:"LEVEL The log level") ~f:(Option.iter ~f) ;; let set_level_via_param log = set_level_via_param_helper ~f:(set_level log) let set_level_via_param_lazy log = set_level_via_param_helper ~f:(fun level -> set_level (Lazy.force log) level) ;; let raw ?time ? t fmt = printf ?time ?tags t fmt let debug ?time ? t fmt = printf ~level:`Debug ?time ?tags t fmt let info ?time ? t fmt = printf ~level:`Info ?time ?tags t fmt let error ?time ? t fmt = printf ~level:`Error ?time ?tags t fmt let raw_s ?time ? t the_sexp = sexp ?time ?tags t the_sexp let debug_s ?time ? t the_sexp = sexp ~level:`Debug ?time ?tags t the_sexp let info_s ?time ? t the_sexp = sexp ~level:`Info ?time ?tags t the_sexp let error_s ?time ? t the_sexp = sexp ~level:`Error ?time ?tags t the_sexp module For_testing = struct let create_output = Output.For_testing.create let create ~map_output level = let output = [ create_output ~map_output ] in create ~output ~level ~on_error:`Raise ~time_source:None ~transform:None ;; end module Private = struct let push_message_event = Raw_log.push_message_event let set_async_trace_hook f = async_trace_hook := Some f let set_level_via_param_lazy = set_level_via_param_lazy let all_live_logs_flushed = Raw_log.all_live_logs_flushed end let create ~level ~output ~on_error ?time_source ?transform () = create ~level ~output ~on_error ~time_source ~transform ;; let create_null () = create ~level:`Error ~output:[] ~on_error:(`Call (fun (_ : Error.t) -> ())) () ;;
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>