nanoev/trace/Trace/index.html
2025-05-05 14:16:16 +00:00

57 lines
27 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Trace (trace.Trace)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.0.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">Index</a> &#x00BB; <a href="../index.html">trace</a> &#x00BB; Trace</nav><header class="odoc-preamble"><h1>Module <code><span>Trace</span></code></h1></header><div class="odoc-content"><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="keyword">struct</span> <span class="keyword">include</span> <a href="../Trace_core/index.html">Trace_core</a> <span class="keyword">end</span></span></code></summary><div class="odoc-spec"><div class="spec type anchored" id="type-span"><a href="#type-span" class="anchor"></a><code><span><span class="keyword">type</span> span</span><span> = int64</span></code></div><div class="spec-doc"><p>A span identifier.</p><p>The meaning of the identifier depends on the collector.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-user_data"><a href="#type-user_data" class="anchor"></a><code><span><span class="keyword">type</span> user_data</span><span> = </span><span>[ </span></code><ol><li id="type-user_data.Int" class="def variant constructor anchored"><a href="#type-user_data.Int" class="anchor"></a><code><span>| </span><span>`Int <span class="keyword">of</span> int</span></code></li><li id="type-user_data.String" class="def variant constructor anchored"><a href="#type-user_data.String" class="anchor"></a><code><span>| </span><span>`String <span class="keyword">of</span> string</span></code></li><li id="type-user_data.Bool" class="def variant constructor anchored"><a href="#type-user_data.Bool" class="anchor"></a><code><span>| </span><span>`Bool <span class="keyword">of</span> bool</span></code></li><li id="type-user_data.Float" class="def variant constructor anchored"><a href="#type-user_data.Float" class="anchor"></a><code><span>| </span><span>`Float <span class="keyword">of</span> float</span></code></li><li id="type-user_data.None" class="def variant constructor anchored"><a href="#type-user_data.None" class="anchor"></a><code><span>| </span><span>`None</span></code></li></ol><code><span> ]</span></code></div><div class="spec-doc"><p>User defined data, generally passed as key/value pairs to whatever collector is installed (if any).</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-explicit_span"><a href="#type-explicit_span" class="anchor"></a><code><span><span class="keyword">type</span> explicit_span</span><span> = <a href="../Trace_core/index.html#type-explicit_span">Trace_core.explicit_span</a></span><span> = </span><span>{</span></code><ol><li id="type-explicit_span.span" class="def record field anchored"><a href="#type-explicit_span.span" class="anchor"></a><code><span>span : <a href="#type-span">span</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Identifier for this span. Several explicit spans might share the same identifier since we can differentiate between them via <code>meta</code>.</p><span class="comment-delim">*)</span></div></li><li id="type-explicit_span.meta" class="def record field anchored"><a href="#type-explicit_span.meta" class="anchor"></a><code><span><span class="keyword">mutable</span> meta : <a href="../Trace_core/Meta_map/index.html#type-t">Trace_core.Meta_map.t</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Metadata for this span (and its context). This can be used by collectors to carry collector-specific information from the beginning of the span, to the end of the span.</p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>Explicit span, with collector-specific metadata</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Collector"><a href="#module-Collector" class="anchor"></a><code><span><span class="keyword">module</span> Collector</span><span> = <a href="../Trace_core/Collector/index.html">Trace_core.Collector</a></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Meta_map"><a href="#module-Meta_map" class="anchor"></a><code><span><span class="keyword">module</span> Meta_map</span><span> = <a href="../Trace_core/Meta_map/index.html">Trace_core.Meta_map</a></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Level"><a href="#module-Level" class="anchor"></a><code><span><span class="keyword">module</span> Level</span><span> = <a href="../Trace_core/Level/index.html">Trace_core.Level</a></span></code></div></div><h3 id="tracing"><a href="#tracing" class="anchor"></a>Tracing</h3><div class="odoc-spec"><div class="spec value anchored" id="val-enabled"><a href="#val-enabled" class="anchor"></a><code><span><span class="keyword">val</span> enabled : <span>unit <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Is there a collector?</p><p>This is fast, so that the traced program can check it before creating any span or message.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_default_level"><a href="#val-get_default_level" class="anchor"></a><code><span><span class="keyword">val</span> get_default_level : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="../Trace_core/Level/index.html#type-t">Level.t</a></span></code></div><div class="spec-doc"><p>Current default level for spans.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.7</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_default_level"><a href="#val-set_default_level" class="anchor"></a><code><span><span class="keyword">val</span> set_default_level : <span><a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Set level used for spans that do not specify it. The default default value is <code>Level.Trace</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.7</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_span"><a href="#val-with_span" class="anchor"></a><code><span><span class="keyword">val</span> with_span :
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?__FUNCTION__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__FILE__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__LINE__</span>:int <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span><a href="#type-span">span</a> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>with_span ~__FILE__ ~__LINE__ name f</code> enters a new span <code>sp</code>, and calls <code>f sp</code>. <code>sp</code> might be a dummy span if no collector is installed. When <code>f sp</code> returns or raises, the span <code>sp</code> is exited.</p><p>This is the recommended way to instrument most code.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul><p><b>NOTE</b> an important restriction is that this is only supposed to work for synchronous, direct style code. Monadic concurrency, Effect-based fibers, etc. might not play well with this style of spans on some or all backends. If you use cooperative concurrency, see <code>enter_manual_span</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-enter_span"><a href="#val-enter_span" class="anchor"></a><code><span><span class="keyword">val</span> enter_span :
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?__FUNCTION__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__FILE__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__LINE__</span>:int <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<a href="#type-span">span</a></span></code></div><div class="spec-doc"><p>Enter a span manually.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-exit_span"><a href="#val-exit_span" class="anchor"></a><code><span><span class="keyword">val</span> exit_span : <span><a href="#type-span">span</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Exit a span manually. This must run on the same thread as the corresponding <a href="#val-enter_span"><code>enter_span</code></a>, and spans must nest correctly.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_data_to_span"><a href="#val-add_data_to_span" class="anchor"></a><code><span><span class="keyword">val</span> add_data_to_span : <span><a href="#type-span">span</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Add structured data to the given active span (see <a href="#val-with_span"><code>with_span</code></a>). Behavior is not specified if the span has been exited.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.4</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-enter_manual_sub_span"><a href="#val-enter_manual_sub_span" class="anchor"></a><code><span><span class="keyword">val</span> enter_manual_sub_span :
<span><span class="label">parent</span>:<a href="#type-explicit_span">explicit_span</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?flavor</span>:<span>[ `Sync <span>| `Async</span> ]</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?__FUNCTION__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__FILE__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__LINE__</span>:int <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<a href="#type-explicit_span">explicit_span</a></span></code></div><div class="spec-doc"><p>Like <a href="#val-with_span"><code>with_span</code></a> but the caller is responsible for obtaining the <code>parent</code> span from their <em>own</em> caller, and carry the resulting <a href="#type-explicit_span"><code>explicit_span</code></a> to the matching <a href="#val-exit_manual_span"><code>exit_manual_span</code></a>.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">flavor</span> <p>a description of the span that can be used by the <a href="../Trace_core/Collector/module-type-S/index.html"><code>Collector.S</code></a> to decide how to represent the span. Typically, <code>`Sync</code> spans start and stop on one thread, and are nested purely by their timestamp; and <code>`Async</code> spans can overlap, migrate between threads, etc. (as happens in Lwt, Eio, Async, etc.) which impacts how the collector might represent them.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.3</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-enter_manual_toplevel_span"><a href="#val-enter_manual_toplevel_span" class="anchor"></a><code><span><span class="keyword">val</span> enter_manual_toplevel_span :
<span><span class="optlabel">?flavor</span>:<span>[ `Sync <span>| `Async</span> ]</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?__FUNCTION__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__FILE__</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">__LINE__</span>:int <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<a href="#type-explicit_span">explicit_span</a></span></code></div><div class="spec-doc"><p>Like <a href="#val-with_span"><code>with_span</code></a> but the caller is responsible for carrying this <code>explicit_span</code> around until it's exited with <a href="#val-exit_manual_span"><code>exit_manual_span</code></a>. The span can be used as a parent in <a href="#val-enter_manual_sub_span"><code>enter_manual_sub_span</code></a>.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">flavor</span> <p>see <a href="#val-enter_manual_sub_span"><code>enter_manual_sub_span</code></a> for more details.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.3</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-exit_manual_span"><a href="#val-exit_manual_span" class="anchor"></a><code><span><span class="keyword">val</span> exit_manual_span : <span><a href="#type-explicit_span">explicit_span</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Exit an explicit span. This can be on another thread, in a fiber or lightweight thread, etc. and will be supported by backends nonetheless. The span can be obtained via <a href="#val-enter_manual_sub_span"><code>enter_manual_sub_span</code></a> or <a href="#val-enter_manual_toplevel_span"><code>enter_manual_toplevel_span</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.3</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_data_to_manual_span"><a href="#val-add_data_to_manual_span" class="anchor"></a><code><span><span class="keyword">val</span> add_data_to_manual_span :
<span><a href="#type-explicit_span">explicit_span</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p><code>add_data_explicit esp data</code> adds <code>data</code> to the span <code>esp</code>. The behavior is not specified is the span has been exited already.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.4</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-message"><a href="#val-message" class="anchor"></a><code><span><span class="keyword">val</span> message :
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?span</span>:<a href="#type-span">span</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p><code>message msg</code> logs a message <code>msg</code> (if a collector is installed). Additional metadata can be provided.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">span</span> <p>the surrounding span, if any. This might be ignored by the collector.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-messagef"><a href="#val-messagef" class="anchor"></a><code><span><span class="keyword">val</span> messagef :
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?span</span>:<a href="#type-span">span</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span><span>(<span><span><span>(<span class="type-var">'a</span>, <a href="../../ocaml/Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a>, unit, unit)</span> <a href="../../ocaml/Stdlib/index.html#type-format4">format4</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p><code>messagef (fun k-&gt;k&quot;hello %s %d!&quot; &quot;world&quot; 42)</code> is like <code>message &quot;hello world 42!&quot;</code> but only computes the string formatting if a collector is installed.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_thread_name"><a href="#val-set_thread_name" class="anchor"></a><code><span><span class="keyword">val</span> set_thread_name : <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Give a name to the current thread. This might be used by the collector to display traces in a more informative way.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_process_name"><a href="#val-set_process_name" class="anchor"></a><code><span><span class="keyword">val</span> set_process_name : <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Give a name to the current process. This might be used by the collector to display traces in a more informative way.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-counter_int"><a href="#val-counter_int" class="anchor"></a><code><span><span class="keyword">val</span> counter_int :
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<span>int <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p>Emit a counter of type <code>int</code>. Counters represent the evolution of some quantity over time.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">data</span> <p>metadata for this metric (since 0.4)</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-counter_float"><a href="#val-counter_float" class="anchor"></a><code><span><span class="keyword">val</span> counter_float :
<span><span class="optlabel">?level</span>:<a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?data</span>:<span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span><span>(string * <a href="#type-user_data">user_data</a>)</span> list</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span>string <span class="arrow">&#45;&gt;</span></span>
<span>float <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p>Emit a counter of type <code>float</code>. See <a href="#val-counter_int"><code>counter_int</code></a> for more details.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">level</span> <p>optional level for this span. since 0.7. Default is set via <a href="#val-set_default_level"><code>set_default_level</code></a>.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">data</span> <p>metadata for this metric (since 0.4)</p></li></ul></div></div><h3 id="collector"><a href="#collector" class="anchor"></a>Collector</h3><div class="odoc-spec"><div class="spec type anchored" id="type-collector"><a href="#type-collector" class="anchor"></a><code><span><span class="keyword">type</span> collector</span><span> = <span>(<span class="keyword">module</span> <a href="../Trace_core/Collector/module-type-S/index.html">Collector.S</a>)</span></span></code></div><div class="spec-doc"><p>An event collector.</p><p>See <a href="../Trace_core/Collector/index.html"><code>Collector</code></a> for more details.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-setup_collector"><a href="#val-setup_collector" class="anchor"></a><code><span><span class="keyword">val</span> setup_collector : <span><a href="#type-collector">collector</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>setup_collector c</code> installs <code>c</code> as the current collector.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Invalid_argument</code> <p>if there already is an established collector.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_current_level"><a href="#val-get_current_level" class="anchor"></a><code><span><span class="keyword">val</span> get_current_level : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="../Trace_core/Level/index.html#type-t">Level.t</a></span></code></div><div class="spec-doc"><p>Get current level. This is only meaningful if a collector was set up with <a href="#val-setup_collector"><code>setup_collector</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.7</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_current_level"><a href="#val-set_current_level" class="anchor"></a><code><span><span class="keyword">val</span> set_current_level : <span><a href="../Trace_core/Level/index.html#type-t">Level.t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Set the current level of tracing. This only has a visible effect if a collector was installed with <a href="#val-setup_collector"><code>setup_collector</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.7</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-shutdown"><a href="#val-shutdown" class="anchor"></a><code><span><span class="keyword">val</span> shutdown : <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>shutdown ()</code> shutdowns the current collector, if one was installed, and waits for it to terminate before returning.</p></div></div><h3 id="extensions"><a href="#extensions" class="anchor"></a>Extensions</h3><div class="odoc-spec"><div class="spec type anchored" id="type-extension_event"><a href="#type-extension_event" class="anchor"></a><code><span><span class="keyword">type</span> extension_event</span><span> = </span><span>..</span></code></div><div class="spec-doc"><p>Extension event</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.8</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-extension_event"><a href="#val-extension_event" class="anchor"></a><code><span><span class="keyword">val</span> extension_event : <span><a href="#type-extension_event">extension_event</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Trigger an extension event, whose meaning depends on the library that defines it. Some collectors will simply ignore it. This does nothing if no collector is setup.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.8</li></ul></div></div></details></div></div></body></html>