From ae8704128d3038e6e314a70983bf399628153bc7 Mon Sep 17 00:00:00 2001 From: Kevin Li Date: Fri, 19 Jul 2024 18:52:30 +0800 Subject: [PATCH] add docs for logging --- MODULE.bazel | 9 +- README.md | 2 +- docs/images/bfile.png | Bin 38745 -> 0 bytes docs/logging.md | 81 ---------- docs/logging/async_file_appender.md | 126 +++++++++++++++ docs/logging/images/logging-async.png | Bin 0 -> 32771 bytes docs/logging/images/logging-classic.png | Bin 0 -> 33843 bytes docs/logging/images/logging-logger.png | Bin 0 -> 28082 bytes docs/logging/images/logging-nano.png | Bin 0 -> 33263 bytes docs/logging/index.md | 32 ++++ docs/logging/logger.md | 146 ++++++++++++++++++ .../modules/rules_cuda/0.2.2-dev/MODULE.bazel | 17 -- .../modules/rules_cuda/0.2.2-dev/source.json | 5 - 13 files changed, 312 insertions(+), 106 deletions(-) delete mode 100644 docs/images/bfile.png delete mode 100644 docs/logging.md create mode 100644 docs/logging/async_file_appender.md create mode 100644 docs/logging/images/logging-async.png create mode 100644 docs/logging/images/logging-classic.png create mode 100644 docs/logging/images/logging-logger.png create mode 100644 docs/logging/images/logging-nano.png create mode 100644 docs/logging/index.md create mode 100644 docs/logging/logger.md delete mode 100644 registry/modules/rules_cuda/0.2.2-dev/MODULE.bazel delete mode 100644 registry/modules/rules_cuda/0.2.2-dev/source.json diff --git a/MODULE.bazel b/MODULE.bazel index 8a59e9bb..71b81621 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -30,9 +30,14 @@ bazel_dep(name = 'googletest', version = '1.14.0', repo_name = 'com_google_googl bazel_dep(name = 'platforms', version = '0.0.10', dev_dependency = True) bazel_dep(name = 'rules_cc', version = '0.0.9', dev_dependency = True) -# --registry=file://%workspace%/registry # rules_cuda latest release 0.2.1 is too old and do not have auto detect feature -bazel_dep(name = 'rules_cuda', version = '0.2.2-dev', dev_dependency = True) +bazel_dep(name = 'rules_cuda', version = '0.2.1', dev_dependency = True) +archive_override( + module_name = 'rules_cuda', + urls = ['https://github.com/bazel-contrib/rules_cuda/archive/3482c70dc60d9ab1ad26b768c117fcd61ee12494.tar.gz'], + strip_prefix = 'rules_cuda-3482c70dc60d9ab1ad26b768c117fcd61ee12494', + integrity = 'sha256-x78dpBtaMUgKBHf0ztSe7QirHLOv93xwTjc8+cUmlPU=', +) cuda = use_extension('@rules_cuda//cuda:extensions.bzl', 'toolchain', dev_dependency = True) cuda.local_toolchain() diff --git a/README.md b/README.md index ab60f133..b0eee444 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Babylon也支持使用[CMake](https://cmake.org)进行构建,并支持通过[f - [:concurrent](docs/concurrent/index.md) - [:executor](docs/executor.md) - [:future](docs/future.md) -- [:logging](docs/logging.md) +- [:logging](docs/logging/index.md) - [:reusable](docs/reusable/index.md) - [:serialization](docs/serialization.md) - [:time](docs/time.md) diff --git a/docs/images/bfile.png b/docs/images/bfile.png deleted file mode 100644 index 6c0c9c8f27ff06e17556ae23f9587087c5e02ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38745 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 diff --git a/docs/logging.md b/docs/logging.md deleted file mode 100644 index 52f46ade..00000000 --- a/docs/logging.md +++ /dev/null @@ -1,81 +0,0 @@ -# logging - -## 原理 - -目前后端服务在glog的带动下,类streaming的<<接口模式被广泛采用,在此基础上结合sink扩展成为异步方案基本成为标准。百度后端之前内部使用的comlog系统,车载的apollo都使用了类似的模式。在常规场景下一般功能已经足够,不过如果追求最佳性能的话,这个常用组合还是存在一些问题 - -![](images/afile.png) - -1. 从用户<<接入开始,到writev系统调用间,一共存在3次日志内容的拷贝 - -- 原始信息>>streambuf -- streambuf->render_msgbuf -- render_msgbuf->current_buffer - -2. 对于全局结构采用锁保护,例如current_buffer为锁后拷贝,在并发增大情况下竞争问题会逐步显现 - -针对这两个问题,采用ConcurrentBoundedQueue实现babylon::AsyncFileAppender,消除了锁同步的动作,同时通过babylon::PageAllocator将中转使用的3次内存拷贝降低为1次 - -![](images/bfile.png) - -## 使用方法 - -### 用法示例 - -```c++ -#include "babylon/logging/logger.h" - -using ::babylon::LoggerManager; -using ::babylon::LogSeverity; - -// 取得默认logger -auto& root_logger = LoggerManager::instance().get_root_logger(); - -// 根据name取得某个层级的logger -// name根据层级查找配置,例如对于name = "a.b.c" -// 会依次尝试"a.b.c" -> "a.b" -> "a" -> root -auto& logger = LoggerManager::instance().get_logger("..."); - -// 开启一次log事务 -BLOG(INFO) << ... // 使用root logger -BLOG_STREAM(logger, INFO) << ... // 使用指定的logger - -// 一般在语句结束后,就会视为结束进行日志提交 -// 支持使用noflush来进行渐进组装 -BLOG(INFO) << "some " << ::babylon::noflush; -BLOG(INFO) << "thing"; // 输出[header] some thing - -// 支持类printf格式化功能,底层由abseil-cpp库提供支持 -BLOG(INFO).format("hello %s", world).format(" +%d", 10086); - -// 更说明见注释 -// 单测test/test_async_file_appender.cpp -``` - -## 性能对比 - -| payload=300B thread=1 | qps | cpu | latency | qps | cpu | latency | qps | cpu | latency | qps /dev/null | cpu | latency | -|-----------------------|-----|-------|---------|-----|-------|---------|-------|------|---------|---------------|------|---------| -| log4cxx | 1W | 0.08 | 2908 | 10W | 0.772 | 2858 | 20.5W | 1.56 | 3307 | 32.6W | 1.97 | 2945 | -| boost | 1W | 0.049 | 2232 | 10W | 0.438 | 2134 | 30.3W | 1.23 | 1975 | 37.7W | 1.92 | 2690 | -| spdlog | 1W | 0.021 | 674 | 10W | 0.173 | 553 | 65.0W | 1.25 | 824 | 89W | 1.67 | 883 | -| glog + comlog | 1W | 0.023 | 1479 | 10W | 0.170 | 1363 | 71.8W | 1.28 | 1390 | 70.8W | 1.00 | 1387 | -| BLOG | 1W | 0.018 | 1095 | 10W | 0.155 | 1064 | 100W | 1.51 | 995 | 102W | 1.02 | 970 | - -| payload=300B thread=12 | qps | cpu | latency | qps | cpu | latency | qps | cpu | latency | qps /dev/null | cpu | latency ns | -|------------------------|-----|-------|---------|-----|------|---------|-------|------|---------|---------------|------|------------| -| log4cxx | 1W | 0.105 | 4725 | 10W | 1.24 | 7427 | 18.2W | 3.08 | 20020 | 30.6W | 4.41 | 14086 | -| boost | 1W | 0.074 | 3441 | 10W | 0.53 | 2975 | 23.8W | 1.36 | 3442 | 39.1W | 2.43 | 4231 | -| spdlog | 1W | 0.043 | 2234 | 10W | 0.26 | 1782 | 35.0W | 3.24 | 7958 | 70.0W | 1.79 | 1538 | -| glog + comlog | 1W | 0.035 | 2227 | 10W | 0.22 | 1718 | 125W | 12.2 | 9426 | 139W | 11.7 | 8655 | -| BLOG | 1W | 0.025 | 1605 | 10W | 0.19 | 1338 | 192W | 4.27 | 6347 | 942W | 12.5 | 1279 | - -开源实现:异步日志性能spdlog >> boost > log4cxx - -- 共性问题:未进行批量写优化,导致cpu开销一般较大,相应的极限吞吐线也较低;异步队列简单锁+普通队列实现,大并发下竞争问题突出; -- spdlog:在github广受好评,实测效果确实不错,轻量实现额外开销很低,单线程模式延迟低于AFILE;但是由于采用简单锁同步,并发增高后延迟会显著退化,评测按照未引起退化的最大吞吐计算; -- boost:使用繁琐,性能表现一般,竞争增大后性能退化尤其严重; -- log4cxx:当前社区比较活跃,但目前实现还比较简陋,额外开销和竞争适应性显著是较差的; -内部实现: -- comlog:特有的全局buffer + 队列实现,一定程度上降低了临界区内直接操作队列的缓存竞争效应,以及动态内存申请,对比开源的锁 + 队列实现有显著竞争适应性提升; -- BLOG:利用无锁队列的性能优势,去掉了对全局buffer的依赖,一方面减少了拷贝减少了日志的额外开销;另一方面无锁队列进一步提升了竞争适应性; diff --git a/docs/logging/async_file_appender.md b/docs/logging/async_file_appender.md new file mode 100644 index 00000000..83bc2d68 --- /dev/null +++ b/docs/logging/async_file_appender.md @@ -0,0 +1,126 @@ +# async_file_appender + +## LogEntry&LogStreamBuffer + +LogStreamBuffer是一个std::stringbuf的实现,实际内存管理在分页定长内存上,LogEntry就是这个分页定长内存本身的维护结构。 + +### 用法示例 + +```c++ +#include "babylon/logging/log_entry.h" + +using babylon::LogStreamBuffer; +using babylon::LogEntry; + +// 使用LogStreamBuffer需要先设置一个PageAllocator +PageAllocator& page_allocator = ... +LogStreamBuffer buffer; +buffer.set_page_allocator(page_allocator); + +// 后续buffer可以反复使用 +loop: + buffer.begin(); // 每次使用需要用begin触发准备动作 + buffer.sputn(...); // 之后可以进行写入动作,一般不直接调用,而是成为LogStream的底层 + LogEntry& entry = buffer.end(); // 一轮写入完成,返回最终的组装结果 + ... // LogEntry本身只有一个cache line大小,可以轻量拷贝转移 + +consumer: + ::std::vector iov; + // 一般LogEntry经过异步队列转移到消费者执行 + LogEntry& entry = ... + // 追加倒出成iovec结构,主要方便对接writev + entry.append_to_iovec(page_allocator.page_size(), iov); +``` + +## FileObject + +FileObject是对于日志写入对向的抽象,功能为对外提供可用的fd,对于需要滚动的场景,内部完成滚动和老文件管理 + +```c++ +#include "babylon/logging/file_object.h" + +using babylon::FileObject; + +class CustomFileObject : public FileObject { + // 核心功能函数,上层在每次写出前需要调用此函数来获得文件操作符 + // 函数内部完成文件滚动检测等操作,返回最终准备好的描述符 + // 由于可能发生文件的滚动,返回值为新旧描述符(fd, old_fd)二元组 + // fd: + // >=0: 当前文件描述符,调用者后续写入通过此描述符发起 + // < 0: 发生异常无法打开文件 + // old_fd: + // >=0: 发生文件切换,返回之前的文件描述符 + // 一般由文件滚动引起,需要调用者执行关闭动作 + // 关闭前调用者可以进行最后的收尾写入等操作 + // < 0: 未发生文件切换 + virtual ::std::tuple check_and_get_file_descriptor() noexcept override { + ... + } +}; +``` + +## RollingFileObject + +实现滚动文件的FileObject,支持按照时间间隔滚动切换,并提供定量保留清理能力 + +```c++ +#include "babylon/logging/rolling_file_object.h" + +using babylon::RollingFileObject; + +RollingFileObject object; +object.set_directory("dir"); // 日志所在目录 +object.set_file_pattern("name.%Y-%m-%d"); // 日志文件名模板,支持strftime语法 + // 当时间驱动文件名发生变化时,执行文件滚动 +object.set_max_file_number(7); // 最多保留个数 + +// 实际会写入类似这样名称的文件当中 +// dir/name.2024-07-18 +// dir/name.2024-07-19 + +// 启动期间调用此接口可以扫描目录并记录其中符合pattern的已有文件 +// 并加入到跟踪列表,来支持重启场景下继续跟进正确的文件定量保留 +object.scan_and_tracking_existing_files(); + +loop: + // 检查目前跟踪列表中是否超出了保留数目,超出则进行清理 + object.delete_expire_files(); + // 一些场景进程会同时输出很多路日志文件 + // 主动调用便于在一个后台线程实现所有日志的过期删除 + ... + sleep(1); +``` + +## AsyncFileAppender&AsyncLogStream + +AsyncFileAppender实现了LogEntry的队列传输,以及最终异步向FileObject执行写入动作 +AsyncLogStream包装了AsyncFileAppender、FileObject和LogStreamBuffer,对接到Logger机制 + +```c++ +#include "babylon/logging/async_log_stream.h" + +using babylon::AsyncFileAppender; +using babylon::AsyncLogStream; +using babylon::FileObject; +using babylon::LoggerBuilder; +using babylon::PageAllocator; + +// 需要先准备一个PageAllocator和一个FileObject& +PageAllocator& page_allocator = ... +FileObject& file_object = ... + +AsyncFileAppender appender; +appender.set_page_allocator(page_allocator); +// 设置队列长度 +appender.set_queue_capacity(65536); +appender.initialize(); + +// 组合AsyncFileAppender和FileObject行程一个能够生成Logger的AsyncLogStream +LoggerBuilder builder; +builder.set_log_stream_creator(AsyncLogStream::creator(appender, object)); +LoggerManager::instance().set_root_builder(::std::move(builder)); +LoggerManager::instance().apply(); + +// 之后就会在日志宏背后开始生效 +BABYLON_LOG(INFO) << ... +``` diff --git a/docs/logging/images/logging-async.png b/docs/logging/images/logging-async.png new file mode 100644 index 0000000000000000000000000000000000000000..59c9a25cd5be5d7ce1b8d820ae03a6393a20e56d GIT binary patch literal 32771 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 z z#uCJh`p$>u1r;Ok&VRrYxx4%s`_kt$zRzM_0CSM|ym;bilk{^4Sd*&OK@Hdc(53c9 z=TH8A^Oy0;j1XKKnn@+d=?K(7oCEVfhxTznwTKrO5Et-6lCjfY3kP5kVcC_vzWj)`7BQ7;_+c>`2x>#BAQ z-Ftrm_eqZ9*o+nGA0^=dS1FJBUhM&(UhQNW37K^Om6VQIw;^is2{$3Q@^?xA!d1v6 zgK#X%mSnoR=zzyXM(xjoXND}oIdKWJTu6K{0*2E|hzlq>7xe@#@N<~fVDhLDO>si6 zJRT83ytx0%4{@A5Yto}}X}RBnp;A_HBvHU*)!^7(V`%0(RDhU>tdawO)mrf( z2wdc9`1t|zL{u2tKXa|*5uXI%s|P@^3(VZH8|i;tq)Zj}2)L!RoC5xac>Ia!y@}YS zYMz8i4JrsU2<|*Dj?+eNAG4PLuAWXfV}dwW8em97o51yw(Bsi)CH?K4g~$1-#0s!= znIxw9UH9IAwu4=q#lhWulZ11#*;s5esYT?!qx=<`iL+nEaihKfQcvn=Fjt6REyo=Z zfG%+TcF))g*8<$8j*k)#Kk9o#@zF-&=u8}6LdQN~`2Ss12WAnZ6f}BC|1V#GUz#Wf z;Ds=8)XDGqZu&fTWriKTU-|jL-b0iJ+-vpktKdg?QJK}&cs%C8oWs%!R$!tIXa$pJ zGVgX|y@@TYMj2zNhZJ@|2s#l7U-z%{wR-y%3dipt^o)wBA%P2?s6KGGlTwPCYT}}# za-Sg|(H;dT;&ht+0yu?FT$Z>SQCXwWnE;-`Hg&G93|jwB?)jnszSoX6L_d@aawQ}T6d)2EoI7y^3$5?oN0KY&wb^iZX5>X;g?5iS0s-kN?_=bR8&-P0H=-h#-QQ9v*JrA z>jj!kVF1_w+XM17;@-JvTOdmLz1-Gvsf{}hW(Ry0gajzT!4HDD0TbQ?9k8}IqW5p! zbffDzg{c!f_BTzRfF194IQ=Ko$o+{tl#^b7T%l#{{_v_$C#KQ5>la2s?F+Sn_k>i= zg|D)Bfc6t0fqR+DU~H@i#DLvic8n3~Yt+@BgEAtO$vabpKQFHUk^zqr&Vj@M)Wr(L zB99VIGaJIea_^KdB@Tez2pF1tQ18%*8Fw58&T+BPp&=V(BPs*cG1Qx1T@l9Rd@c;h z-)3s(j{Xy+@(ZWJ5-bj7if0>ab&Wx-oaI0q6<{$4=QH<99L`p*00FCfVjS?g@vEJU zg<6#cfO_h_TU^+%;_F504U>Q78QTC037Le-8(%xky$yT&XhT{d>HlNKsPa|QdjG8RZpuNql_2v>=P%H2DKMIRLEJ%IQe z$oWGOebEApr9@xX8SBp%jYSIO88O?@ypXgevr$3p2a> z@eMQp9TF@Ao`!{k_zh|CTfoS@Ip0So5(IEp?58jl%y*hf12Zejmt+q9JEj{0@zX!R z{ad0n^edNbT754IN5b_X_de=^Ei}n6H?{2izjf)1ha`8e4ZmtE;%-76Ttn-kg%crl z3vV`tRYs|7pi=UTQ$bE5;cg!J0*VYwNcYhc3XctF(9kITI3DOEwutW}((68L?12lI&pBvrP6bThc zQB8LG(h?t|DLsqfTgS5&GEnF4KQ7?dCxzPzjc_dIegV3XKtm}-&#FQmFA7H;7(~xc z{w02TuG%C#GscJO9@4ZZ%kb_X=$at>2Y7AJIJ-Y%ejk8;cRpLyEy-kY*a5bCUs*kR zIW7UCXCKgP_Q8S_6vX4q!bm4p*<{(wD{6x+m1QbEc$5SP(#cCVlDI& zPEEW=j6CLgM|&>1XpyCSu*n+&=0MujZFLH4(NM{~N0?vY@yn0`zcvJ={-iV>>`E0E zP&UDZD0JRN!W)V7&&5?Qz3;~8icghG8)Ba+yz8OfFUpG%_lnell#~MUg+&;-D*$fr z8Y6bmm<63r;4_VIORf7OVxqQJNpzzpGktTmXz#5f)7yySbV__XaV5EiTJEb_QA`J$ z9vNVhL14nS4S4u>ugKo?nCQiBCX;V;emr_Nyy-tGbfIU_1+>R7MWt>BNVRE$^&JU_ zT##d(ZGueeGU9(R%g7cOeHgz4shZ~bBb`?kdU2gNheS9gMehginPN6qBfe6>k@NpX zrI)Zl=9384tQjf^2lc?%k^X^pJz&a3r5bN^FbOoIlwK!CRubFwSD>LT3df_TcKY^B zluCNg#NjQK%&g2)pE{SYolZcER@+OTWwZN)C3xhYM6VZ!R9MfZRUJ+FnWhIB+2a5| zU`iBjNH9fh5%wqqQ?%9eoY%}zWq22Cz-J#^-{Xof9-!;i;vo=I<|v;&7FA2qqcI|t zJ0|JArtp)Kv_?&Sj}Y?Z?Vd)L+XBcvy|V5Rmxu~D_T5|DCbFG=mZIkfbfHI1G#8&=;U{Ap11lALl39f58faY3Zt2SjmP$b{1VQ0Yh=ZK!EAT6 zKE$-X>7ODo-xU0Ydw`e-*~~m4mT-l;jQCMN8I`~6DxiUdFOXe{86pxe;)t@n!m99^ zp4_6l0;=n@!v&`?p|C?zw4SK`E1(EIE!ZFwU6i81ZvPo0z%oZ-{~eSu%(lW`Dr|6` zPDz?t_7;h=Ef^7q=S<`@h2Y9yu!lR*QCOu%AENgO zl!11;ZHcc21K(g)yk7i>(^YfFry#MXO`8W9M(0aO94)ad0P}i&2msOPyf1#gf!&#d zk_KTFCnXL>hBg57y_8)JiOLHqIKFN*Nc|Q_lce$HlR1XIHrOajtUwsiKvlqR+AiVxY*mFr`4p9_y48=``$FuPOUlUkAkw7=Z z{y9qtrdd#i0%*&+IMIbr)Kz7F0-~7g^MW4d$687}%mc%rWzam;J6usXM``>gu3xJZ zV(bwIh^51*&7W0WrbDrdB*Bu20cR1xw)rLgN-Ou0^lK(aAQw{r>SX*7*pB=`7_U;3 zf$QbRY>4CZjwqJud^QBb4;#0%*&txFC#gSXy+UMqJ16?r(e0j-dHM4hlMwR zVad7(Vur~l@n-1r<^b`UDy6xe$ul-DB~`HU(gVxuWb{Pz(pc&|3uNI5JBQmIb=02< zj^7QuY=@_HzS!x%QOKK+hKC;@4mhTSZG_AOdpxM{6@c7bY7|<_3bq1&5k;9yu5MWf)a*svROSSh zYA(R$*a(AQ=ceP38b+U8I9d=RI-$lDgy2Hpscg_psF$ded34=#@e%u|*yMA9R4kkT zx7a9lI|(1n2E~S=t}y;xvvr_2+!p6)wcg-y;2_a#H5G+zA_~qNAuw z2z<3{UO+A%mO1Fl&S$|7+guTXlBFT)RH;dIIaRJNWSB0 zx%QCJMlqf6_e2d~*4I+xATEB1h5SCBSN(;5bQinqXia(7)epJl296Ahv^-5;Rp(0xt`KxF~+PKcRxe z2tC3NS%&Ow^A`KSCwKwLKIFg7NoX{-OmZ$Z9S&;)|;Ef!vX8fN1+M8Zm+m<#7 zk{S3CiO*!#X@K}d6FD>;IL!RfP$LJpFp@MpW4d z&Exth>DL7PY)OOw19i9TbvW+}msqL$g~iKNDT_aeYn^MGWaIIU4uewhzt`3Z*jLI{ z>O_P>wa%tIz?N3(ow}=UzEYhHc=oz;lbDk=AeV(w7_E{K$4P4rLX`x3=u~+y1K|@Q z%;aw}l_3pvS>#&4wBMNg4A(3rT9u=ii~7yZfc$`2plY#Rr9~>@D@cLdEZeLMsJe0aO0yxbU|ag-RLHk~e_H$QA&K z*r;~Iis(p-A18lobOvE!7A9u9B@m{ih#kanj zN%&^Nox*Au<2ywgFQ)?-jVKu?v@deNZWp{7+prh%j(ZX{k}zOg`ZYvV0xIpUL9{qz z7L$PgnF3{VsoMS6c+#B~68jnW2%T29Y^HhHc0TT*dx1U9mN+|M6t+=xTG)i|LXtRT|`+C3U z`@G&#-!;CM4HB^{v-rFh1Ec>)^6zsDD^DX zvTtM2|50bvt75HQsaff|Zw6SN5)yi@*w%Jm!5-BELpTr|K-D%|=S5?W;=O z1|^;SW-VPYk_x&uSn{M0Yu!El(w<$UWFCvoY;S7r?KnlGrBofe0TSXqq znv8s-kVHw6?U!18x}?d+A7C}oh8WvHiz0OJI+T%V%yZh18|SKtlYtfgdtj5I=N@{)M`#= zdqPAtvA3(%LO<#>oUpV(5MNYUYgMYzSDrRgH0+n_-k9C+pG0;Za<=Vsxc5LwMV2!J z2XD@GS7LL`M%sODw%qh~_5bFHAYhfL?{hXIC%>HtX0J_Z|DoL3(v;cCY+mbR5Mo&l zezg4IqHSl&N5|hE1CQ&$FpZfc)B;HRqBGo;GTbppt|6~<36di1PY}k9spnbrR!2Vl zB!%7uF#l-f(5+j!+gvrgyEgdk(#m7o8bjW8u;ha|;wf}3d!p&0`L_#(5PWAE@Kvgd zb#XYJ@6eD3`@*dI^tnJJVg1xi-Ab>$dx+)Dc?QSFa}VK<{<=mr->c$hs{#%uc3Pa0 zJ)FNXSlz^P-yRX)KC9JKs?@XImBu@{@jF}}^4n>3|RtMVI4 z@!(FC!Vp;|#gV@4w6FIuMq>=g{eJhbN`qbL^8I+er1u$>;v-2yS6wc_vxnT72bg<@ z2YH|=Q*3F`h(k8&q`L*#K^<$;Ni4m79CF;?O#cJO&mQrFC|n%NiUiFVdldzh8r|LPfxp4NxxHnaYeI;Z`xQjs(i`XE{j zyB0ZU7@rm)jAHj}ZsO_HQ$Kg0o)x+-x&TUMmsza?y}1vyr_DeO>&t4xe75=IaLKJL z_t2xVb^Wlg_-|605>gWk{7bSw6VxpKk|nj*W_EPJd5Sx4$&$X(7twwI;32E;Og~dZ zlitl7ChK}GxLl0#Pm$h*%;w2_b}jAud-wnUf>z*JD)k$SA?8*h!y~#^f0~_-rTq>f z>-(Zld9_!J5D)i!4Z<+*;~s9O{?&N+b-T>Xyb@~rm3?~9-oFCxGeLcL(9)(Xa+b_; z%7uphw@qE$#w+Y4TC&U{^#d*HI(SGiU{aKz3dIuLg&No z6mE-$!%;#;HsM{BHc1UmLB)9c`rbzo=eq>prKvz6;e#N$xNX}D%1 zGScxFYBNWLng6!%J3jPGp995HBwksBxkCdlzA^%3sM7v2K9j+(l45E? zk(}9Q_eFT`#_MdponzZ1HSX1$Uor(>6jvs@re1p&*#EX^lA(xiU%yJK9sJuFbqMMN z1L1}|0{@XxWeKM*vF}Nl;N38S)XWXPp_kG@n+%2Lo92drZ5K{NMYW>KL;XYgRD~U9 zzEYGs_~O{eiWOCP<=f6-HeI$I#Twofz11w6<8RfZns?)kN*@jMzIa@C^;wOG;Ub_? z`gc+z2a{9U7edOLUvxxWPhJxj(+px0!r@X{JG4T7AjL+Km z>Wl`zmjhb)rjkVcYkv*lpFF;a1rL6cx_lZfn_MRgjT3)%ckUqkH06oT=L>#bLvC#9 zqjX`w%9JWNl#-=y;v_nsA@DmH%J7`A1pJ=e48q#T%G>nZQTh2%gahwu3^})2kL&&7 zVym|N($eH2lT2)Sz^gXmQ~Sb==@&bDWtbZQD8sj$cR8*o$2D<_rN~X?-ctwS&Rq*gd2O<~F_TO!b`hl91qX+*9qV`@AG7J5uDth|chgTFv)y{&0IOWwP4 zX$oCAOxAB%)YY{L1rPY;8~-K?Ogq7d7||I7{;x&KB#pvW(wt`%fhRv2Gz>$rC}D%G ztPYOqhdjE#;q_y0fy$8*W`|S$iRfV13u0sfPqo1}je9#G{NKw*_&=I( zkMisd0ve0IZBQB^!s9{Nt4xDJb5Q^L$zN2;KVUQhi4S%P?7U7ogkTFEOH@*Vpa6SP zZe%Gj*w05La8&79y1vJroJVbq7>EDbtC9!DmO@5m8+AJc#Ybuu^<}=yRIqVEm0PG` zqtcbYNS~{v;qj(pV&?&o;q6GfR`-}tiqH1jrUze3J6H8%A+f)}fKmG1!-QC?iYxeO~@MMaXjC829jEuBQe}6w7 z9-dmbBt!gwlCsSDu@Tp9Y_Io35i8-xH^XQ$Xz^79;TzpJOA1QS!4kNbE3HzBGWyS- zca84}(*|_j+8&Fuj0x~FkA2G+^k^n9qs>V2e&u-eP1s(J&Ln2c)>GV5hhwTsktcNo z!a?lE@=N*iv#fNv&*(deN%Gn|&MawB(=)y6$Ib4oxz*Lh#l`ha9zF^RGS=1#?DYg{ zUS3`j65S`$A*Hal#+p|2Lxc1Y&%KU#9k)H%Pz@bDJzjW^I=iKCnxYjCcgCO1cl@?7 z1yjX4J9T#H1%)1AXD9Wg260+kNv6!?_bh~Ob8x9kv@}tB?MRq|C z74K4c`2;iME8R}4tP(9Q=B#91b$Ysmk`fb1d8D*;-h_L(T(vQSsWa2-n>H@Xf<)fW ze_w41Y$LNM6q2TI3^m)*Nk&6{&3!!4y>+)KgnaK;J7v_=NSZ7u-#oXN(_ALXD>JU* zCXG((wC15?M3Qc1eb&+EDja=`ke;?+E&Va{-Sv0*#7t{yV4Y96IYc9BBTA+){|g(9 z#0X~kT$&%}HbsUh}i9WAk{5xM$0Sx$=1lQ3Ewxj*b25A1@V=D;2h3l0RdjIDJn!wN=wH1($ z`LD4G(3q3$)NA(tdhxyjjG8w}%T4<-ga7Mn5<=OBt#4-fuRk~H8_9WlKl$f~HnELz zocQpYkpJh0s>(p)L*I5HBH54jBh2z~|8`-N&?skWeqUzi|20=Y6g{({KVPSg_O~T? zNG4T%8TFcV1pwHF-xFEnf@-!tzY+5cJ} zLrcX5T@qTjRsUZP_FjN4?ai}TYctppy;1OKC;fNVP&mY_Tk3y~5~w+7Ml^C~tBCPGQ#v3#pg?c9+=kR?2jIY; NoYX7H3UQ;r{{s^yn=JqU literal 0 HcmV?d00001 diff --git a/docs/logging/images/logging-classic.png b/docs/logging/images/logging-classic.png new file mode 100644 index 0000000000000000000000000000000000000000..3918a615d777e9adb13f760773929ea110542b3e GIT binary patch literal 33843 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

Eu!+h7e+mVUokbHz*U2 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 literal 0 HcmV?d00001 diff --git a/docs/logging/images/logging-logger.png b/docs/logging/images/logging-logger.png new file mode 100644 index 0000000000000000000000000000000000000000..649677fe25839ba137fc1f5754aabc710f27aa7e GIT binary patch literal 28082 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 literal 0 HcmV?d00001 diff --git a/docs/logging/images/logging-nano.png b/docs/logging/images/logging-nano.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c4823b54443eb77395b2d9336b26cf36dc8edf GIT binary patch literal 33263 zcmaI;1ymJX|2_^M4hJ}NcO4q(mhNtlE=d7Fx)B7VyOd6mkVd*&knWNWX#tT&{)2Zs z-}|@L`?3~mhH=lHou9a_Ya5}iDu<3jf&v18&=usRH9;WwR1gTx0SX45*!_lm0WNT^ znsSn$iczvX;E#AKJ%tx4Dj+7{9tuK)Lj=J;76Ad};c))GhXd|OKnQ=HgFrfPr2pQV zz%l->e3&f=@^_gR!1eJ*9{2^`{`(4_3-`YobHV?VhEL6f|K}dg;qkTFQunXG1=&en z-xUNx#eMvR1EpsYfk0qXTP-~|Jr!j^3&&S%W|ofTR%~9coF3l-33~|wx38?+%wS%x z>>XSMy+o-0ln?~&A0M+*!~PU;vlF4#Q&ERWIl5TE_}DnuIH*NYU@(}li{%SJO=;P` zUkCmYp|){za}s1{_w@8+^Wf|QVfKF~S`=j(WuFlQ5(gq#;LiJ+E>awO~ zVVNP@j4Ms~njz!vds>m@%=9$l0t8M%919Eb&m~Yx3MMoo$a0VW@1ws8ut0(bzPiGo zP;gKH?C(o_A{3gSGPp#aMeyI!)XZc57Wz|GT#*_k%}3{$;b!oEJ_ghrUM39xzX~7A zK8XmxT1akvHEH{whQU$QoT2^SkHeq^v|vfgXJ_>aMF{`t1kh0K$C~o68JU@HuQubp z52xYY)NY~t)AT`E@o@W^9|5&FLD0jRAvXQI`n$WktC$yGlbR z{k=K^;8y)EjZ1aPCHWLn27b&{uA2BBZ8OHFq@-lAKGQ*Ba$)>yG~+QIhcT>$(L!Dr z{A#Jb?f1|BQVB9GJRD;cW(^)CnQD&G)kX{$eS| z_qfULVxdUmgKSSI`qaJe`Gnl%>YE1wRs;LG86Ae4*JrKXKb1Rj{BLXtPK#7BJT4Zj z9qSif94*!f-JSGU52s25Qu<#7KJ#35C)^8!M@sbHh+r5F(V*L%XKna)){V+O9+RJ+ zf7Gz*-y4ptt*u>{NcrZj+HtkLw*9Dn$;AJ9dv_rHS>nHI>2-L3yrrMlvjU}(7!aZ+ zxAmw|qm$W}SaQ!rTZZx+L7Va1YKt$&jhnIRGx*Fpt>=?UKiV!=Zhv%iEIG7r8pyNi zl6$QM+Ca(Nr!{hb&I$c!<#yknUifS+#bef^lFpN-Cm{j1_w5_en|hv8pkWoyJN!HD zFNChv-mdx_l$Tbvr!R(LkSlKIy!m~d7ewE@@|C$VcQAg@Q__e1?>RVz z_Fl;-d+J%f4iXoEvOI6U8|EH!!;_r!{(b#D>3U4;ArlzlR0Z4ZY4-LjFoEv?RhV)n ze|1$=Ja|CI_k5Srav+|)<8D%Gvf2Fr_#pAoQhIti_bC77f_2WvJKLfxKHJHH+vAoW z8&T}-mn*)WtA3u(MEOt0r7%^pg%=XkT4Yyq8ykt-mr&Un1GwJYogyXb3KmAN_)1qn z16te<`t|vbSA2gQ6)R%=yWpQw!K7z(8>9r2xS+}J-}?j89(&v^?T$fGYtbLgNw2f{ zC63_%_~Mc)CTP;+h#dTpS`91$7H}gz<@T0T}t{SDni}% zrw1#x_IGb6d=K-Ul#I$vflR_xKeZ7ZTw&>}5>rR{e|j?B=Ic3WH&?+c;DGZ%HYQS8 zM5CJ5G9AU%>gIfpl+S)Vns^z}mpQuIpYdNC(CG*buTEJ#4nJog#|o%l4Aaom400$H z39BVo&98oWHlfCAOEbbNkWG82qMm1q0LL9RlJT^m!Mp+f^LM3xjm`-&U^4t%XbMR8 zqQz6#j0xCHT3^mE-NLHRH^$qK9mO)%&It_dC8CJZ7MA+>hyU9GXu_{0@`T?7RA3wI zwHDK@frJy(sQQ{2LXVzXPy|rN95L%OgK{8rOBl!^YCL!pSjz^r!~kC*U2Ug4U#zwL;I8S%?}XOsH1IAb=Lhb# zF{LD}G0tBe@z(xITBAmqiPc4CrSXk7g2zr`Y|8absVn7RjjkU#R|JSEU2Lj%Y zu`@CMzuo`+=qcYEhn!3Qrxq9r&>>m4_jv#H*8hJ7QJN2>s-XBkgB9=wXyHMQFO>-P zUvu!c1rG-U9nuJR_g>~R@FV%^;db@maC4hOtAyprPJj#uTl^d|j3JOROT${=xqER zFd!r64C4KNTjakcGV(EQka5hkUT(kM$q*@3V)}cb{AnaC5E|}p3GRAd2uvs}2@8vS zLAiN}O9z+%c?@vVpskLBkFfh-f%os zq&5In7@PiJGgUYe!H}JLJ}Qp{f$Mm*u#TS6H;?|;HYi~Ci1uFA|7tyq(AW)o`Re|1 zRW6Q#yhe<@^`sjfQyADo3|H?5_B9S$e~wC8O07r?4m&}l<@kCiLB#FA!1tmCKK#Dy zIQ?X>AA=JJ_yf!d`(#1|=f^g~0n=I7sS;^NNRDy0x%gg-?Q!LaYhra8@+~3&p@gF1 z!Q|uY^>mx94$FE?-f4W{T$1cc)KwdIn4rmLO}v%B3MI5M^^;I2hqgb6hQyJee>*4a)K-YkZo623fILdK;RzTQfzY`@u`d;TUXDQT+CZcd4%lj*1lTK8GCN0c&~VWM~;fQymy@* zTXLPRGLs6!AQ$s*9cMw}&n7eRSg?9lsBHFJU42a#u>pL0T49m^-k~#A`i7 zc}6cR7(U%!6Ef`7(Jf&ul3f?xVV`KA@v*JD{imw<NU;;85FN+4LM_{E(DehS{I^8 z0%+^Q?^}y6u~won!Q!9@BybsgI}k}@aY?hE7K^bSY#l(OwzC4zgjkUn-zwrmNS->} zolmLJm~{C`1k3y+b!^4nS^TJ!@`b_|ElzjWhO@KX?{?pIaLKXbh{&mCU96b_(f*IZmkqhn*%*p%xIEgna(uYLooQGaDEQbbSbGP=!(Iy!} zUZ3;oPu%>z{oyV4f(!4I^p@Q78{B}dvAcE>y~@U%V){&U^h+QH0b+YD*8m>UbTkHh z?0H}|DqD^Pef&pw=S;h?U7(Duzkkg=k5~P|?g!)}ABA0XkU{SeF zQu2j&%(@hQ=MzA{w&vQ`I`!QG46B=0)z;FoG1hd$;kUxX37wwh^cXG}&~JY&aJ#?%l8Fl2~7VS?N2WJfR zP;4MyhlZ+gSFLmWsLR$-bb`b;u*K^@2=JnMsg9=?nEknZqd$?HQnubKE6^o&$7(&|fqN+xtvi|cA6DNkw>?x8|rVDG|VED0)nvrnG{fg}%B>#v%vMEexC z1!VAuSuk=j-2q8usK|%@upOaFzN^TcItL~N2V$+Vc=tTKkjQst)ty1waOMUnezcN33zdm$y9}oc*<@h3FIB< z4@ggR{WllWg_^PwW)a|!z+MBBrI6MO4JxNhzw7N3X9tCX>IX1dzRi>=@xW(Sq1EF`Wj66R!YK01_-P@mZa#$w}V07vlq5+HL zh!|m)6q~RxP2p0~d9QucYmuKd;?GwkEP-_D1!KBx(A@ZkI8mQ*38cNuHE^M2FhmPP z{sf9dRi6OIZ5%pLv)_AAXo7;1x7eF$j)>_eml-V*=z$B*Ztb_9q$b*xgUbGGepka> zFh{a{?QN(UNiw$UW^wZf`Xo3Gs>`|B$v-*#g*q8cw6B2xL1;^X$QqKP;(+l}Ig_k9 zGUyxgr@>b)Ev)6%cwoKWGlX^hK89K;7iS>j{CWEkB=!L0X73%b#NP041Oebq0F(}L z-rk6X1no+(a~ame6#KsRd19y0F)EJT#G*uO-Xo^^_5qcMl}l5!4Le+;4iu6NZ83^fgM~DTjha4a8Zc`-gavY2zH80a#GHv<@J(76vVXb2zXo0 z4wD^k-fY!ncDpj+!1x()a&gs!6WUJ^tVmQuUaKS+IKOhjT=o7=Zd7fv4RO7A`2FMI zq%$%U{+Bq4_pjWCUbU>JyffDyA|nS=Hq;@?X3$B+rw!`EJ68* z`m9M8xfoM8dk%eh^B2<3ep-)}R`2M!Qu+c4tW;rdEt zG7p*tMD2i-tQ)J`8w*+wDq4y&wN-o#(G^-8qc9m!RqhP(&RPy@qHOW%P+FbSq!ggw z-*PYl>ZmPDc#Idty+T#Y@G?RMFPg_C&cmE^zzH&=kt;ZM3A?0gm!S8Q!mht-!#bk}e%iXoH^8nQc9qi7X=smt zx3`v;Lqu{6#AC2l*$qDnb{`>X~!>Pp7E>D zN(bfk!>p}$qaTJa!(=f1%Wv>dLxJ$e84bn$#zkxHilEbqGs1s8gs_$yvW5LU(-i|p z-=CeaY2kJ}zV@~rDux&p()$C5C|Lx})8`xLIjEeg1lg312E+ZN zDL`z`r5y;?>2^LnFDXjxwK5HXVniO`3f07mF}{$mqb>g)E3cixfR!-Y6-NCNW8>&8 z2U<{+xPjUS0n|JIDZ|8O_*@qE)V|ltNC}Bic}o4IprfP64$oHV9v4ke3yk5#^!g`i zlzcvkV%;C$+BA*e(l1+chM07unuSzz>8gBHn1vL<-v)#BT~Wv)>+7f1yZ~ zJj>;BwIB{;KzbtjlZ^tiP(*m@>v;pp&%ZfxA!w=0)XYScpThTAPK1 zAc-iuEDvJ~*$nwd*8t(Y$BP0jQ045rj)171vm z&wTaG9a$8-=QvctK2ygRGHtqq_>8}Vg%zgtbwvwRxCRHMReDdG-D2Ok=NaoP19ZTG%9q8o1Zg@__cY}VgMQ#!t*n#^WmymTuX?ki>V#} zXr{uU#(|U*J<)6=pnHx5fL0C>EFC5~)TynKi^6$UK6m5Kpv=S3D(s>8N&#gF&xP>D z<7H4Rto9JO{DHCuF zw`trTT&ES!;|QIFN@G}{HdzEhP|hOkFX>1TYBE*tczETq17x!MCJcKyoOB=;12MTx zrhT-EasxbK)ZCjv&XeYCNo~dbLwHe?7*bQ*oy8UJx`V{;uwa^khQT)zbWQ^ZUan`P z5{Al^zo^7{De>;l=IW{`aE?DhR;^rlzWN3TFbqY^^KoeJgzc>iX}5g{&tq+e4GZtV zqxjlikns0Wt&;c_79hZ_Qm;i0oVg3{q*`!zNp25S@u-FN5~hd97ZfdU^Ip6!s5eX4#Wd%jBXiJ!B*o#Ya|8|whj$EMvbF+R!S;*gMlz&~v1#dOp zMfc1XGa!MK8O}scUCkt!>cBZI!Up|i-!ySyH|hIQ)Ba-P8VP-vc&l5G%+UFlZ9|+h zZ1_<&p&Wz0Tyq;dC(3H@dDZs|>p>0!x%&hL(*$d0w+x1O28isCMV!M^Zl3)(j!hTt z1=n+qZYpjy3U>-xir>&at`ofas(kv4{7dq#$oJ)5OK<#X?<{TPG;*A28g8G%_y&bUEhn3 z4mj_%gtc>i&J^+GyFnh#<}8uug-!&&pajVv3uVGY3+XCxN zeZqYM(j(DBM&MPei7KjBX`hsXin3-DD16oKkkVdG(U|FqD92$BGEO4G;h9}`Q&YVt zp9z;#5AM-S`+<=|8fK=jh-QSC=ntKivRqfw`zT(Zj_j$x{Gl6~UG(ueG-)`*KrpIm zc8edUnW0dO19N{}D)yrQG8w8V`r9JA==^cnZpImT>!V*V(oLM`_6e+@4j23ty>TIF zWc(M(3aP6f+eGC!zZxmwFYOnL1EvqnqHrAc05d4NfQt z*L9yYjPoCkx5^(|^9K_cv3llcLq+A4bE*_MBdOP47@^w^O$cI&v2Kt`w|sQXd?y7U zNhhpe7MXleiOX!i3;lMI*B;nZ)mLxBT!PtY~Co zs6*-UOkFON(iAP2U)VAYnueCCVX;k+7cGGBJnjT7)%+K|7rgm!?{LvdVl${3#8KSs zms+paU5C!)vID>Pe$de$gFjJn6C)Vx}b#yirRvXZx;`&k~gz zB4xf`v)1{9jL;_LsVe8IDa7RUMJ|;_1yhe0O3ZJm!I_NBB~(X4UcWXKeRC}X1|2xm;Kh2*5>mlcdK12`afJ+Y8XDc|pdY63 z-KOsk6>u*UTW@A1zpV!yN3cMmiiWWCn}b6UapNFjj>=wG7N21O!b=!RHIo`DorhV{ z)Ui6sRlkv~x@!3MZ>t(<(5Gq-7)$UC+o#Gy$5+p8gQ1;js!qsFc#hF(AX*h?6T1>FJrg_3(%>86h2G`G9&JHoyK@0GAa{; zKS_*MSxUm;721vZB(5!wh^srCB1c)N-)&$iwdl(_!8)a>X`?<88GNS7`Ix#S372Ik zizQ@M9oqs63le9d?$o5Mr|ULwUfcuN{M4)nfV&Ji|-z5YjaM53mAa=YR=8t9N7v zaM_G1ChKL%6F!7xc}bxSR5+dX1FG5@4)j$B*GAB}UYod2#a~n$my;#n;AsSsg=m&8 zno5{He07RTO){k>emkio3rF|%Z%9}k1b)zDg|*VYP?n#N7Ndt77fOc>pcq^*k|Va% zyC*AurRv2)S0eNI8NZ9MR)QiVkSUY9p%80a2l^C=hF=)Ii}BPfQ^q7}5mbhKr0mxu zRR?;3<|&tlph1Zc{u_j`oBDDH-o*(HE--Y_JS5l7W`IKEMXe0gxO7Bt_|t+<(arCd z{KiBsIZ9ylMzZL_^<9xKCF~mqwf|uMjdHoOaV*2|aHIu+998B4hZLe}ieOQSS9#E2 z&zD}xT58RBMiDz7^bk#pV?E%W+f0K_E=)5;7T6_tP)|eX_e=Rh$OtKfz0WM&-Yi2i zCOWp5yvm(TWCwa3JMMK1Z*a-;^D8%Whs`Os>p+>nQr~9^%r{F7c z{>@|{fe8}&jIh}?4)v{K7sgjKD#@Cq12}Mdg*vw=M<(J6#;rt7*+Rdg;K8eB^e-^g z%mBz)zHX$MzdW`4i@6HpiM(EwADIHKwa=g|yX&!R5iGiZkImuTlyvWczEydFhFpjq zTrD9)fFE0&snt8KBWN5H%7Y22*gg#WFl8HXN))BkmgU96>i&mwiKl|<{f^h54d}oi z7u3?T5BeeKP<%bzg*Hy7LJ&oF6+fi$GZ;$%d@uicHXl4u`CLr;Ge>uP3Qd%`5kIzt z5hGP@CCRED03%7kD2Mus~^;d|c!G&|Lq96-3zxL*>N z{7soWU=M^OcdE{R6H+~UDAxQKHZLFo5Mb)1v>rtLd$JC_xZsB#tdpS5&?7=B+7sW% zeI{oN^7{t>f(t_@l@+fO`+e2ZODe_CrNPooC8{2wq{`eMPhfitK+}1BJzfGTX8Cn=k>P2CdBD~wM86-Dqbmb8*jhDjaMHk&Wzo) zVN1!Ne-7tA2o{kh@F;ERY2zxQJ*zo`NV^5lQ*Yfj8oJ-Oo7ZOZhdkTuo7~iNKjN?ut-ZCuo9cG9ZP$mp8iLT z0-M3UO1Ul9qKrNlLxh-Svh9&`k~sN=e206jJAp+qBNd9qiF#k9tw#^>1Q?Q@CODpy zaO6hwTv{J6*0XbnxTL6Q&% zQ=Te$9dD@F%@$5>wxBx`#@oFy0NPjM8Hk^C5#1|y`w$3id~oKiqG~dFB<}*FWja|S z2K53a{nsY^?XVM6Gx*RetBX5H5N4ei*M&O(5@dk92fz3!r8UWTI{>Fn8hy&JUcZPM z?CcIf)hHEznsxQ+7shjx0v_(+biwqk;-1AlqPN79ZQ8!N(Ia7CLq z2@^{k5_Jhk4ZcqjzK&UM9Y)GZWc!yLwG9C}SKFM$MU(>z_+msBhK-A=hI-X?G+hD^ z-t^1zwBY=PB>CEptdBiYhDg`JxPP=n3&ujrj9WYaVb8&AIZY6Jq4A@zAx6RpV6cWp zvxGj_nsWV*v4(=Hsp83(tX#AgVd5uwwZu`Bh&5iP=H{}U=7x1IWmq_cqCWZ#*!ce1 z|204pca>Lq4oBIh{&GY8sz7WK{m(2sc8ckdmPODdA$UKdhUv(ZFf97}$^uN8t2Ex? z=}22cp+gb(37T^OEbhtgURrE_S+z&P^Hf&c&2lrQYB~oST3~ay00hie01jfe+U_U& zjh49J@14I$1;bgWZTZNR8%(3FuODGcICSnc2QWiz9xL9~cWiqmcK}x4cY8q>J6FHt z;0s`?A81N{u6k{vyP-W&M!wcL-aEuxk2FLkc8=qq5y>oXcEAEh-CENJeFQ%`aIlU4m!@3 zEno;8ayWeBH%=7<$T{%q6)nf+c(qFQ>q)AD5&S)c#tPCQ0Ff$Hxa%W%5+`)bpPt(Z;Mt1nXJ;;x_qUgGyr0E> zO+Op#+CBp4FbQU!??DX9&H&vvy&DA`S8dH9V}?{d6NsBi#{mKFVPjCk)^aFZadJ#!s7b z-h(MtrZ$o(kR;_*CHi_T5Q$$p@e}3(%>mu_(=U_^`9w%#EWHo-5 z%bsNB;j)VomSR_H@T%nATL}ZH@K$#HvE)h^1v->pMVTN0Y@g0F^&U+SutE)h4HDoO zV;>~W0yTYt@ROO9RmOEKUJ64Z^kpSN4?81`QN3Y*=yTKWhKtI{h`;~804 zctTn{e~9|soTHQS@w{5Bbw8NpSOny8egLHkbu*i^PoDPm8}z?DvaUFq{5S;cMTaXM zALzMvR}eyBfWo*nW7!`3bumFSrPvByeDFWUaETq2ymQpuhoe_PGBTgsO~eH!vH`p*~r#X(3xUc#3B*=3{h1sRr9l}q?D zL0cO+ce9Ur4Ehe-k|}r-y;h#@qgkjEy*SKdQC8yNx(gORtSB>kESOO*IaGsdcJbAz zT4zo8jcx$uGGu7uC8*>?3R5Jwxm!by9KXUz>-yY#FcIMY>2{dh-mx|BQn$zk3(z6| znT>C-0Agl#!P`*kSzsUE%v;2rhB`l!+Tu!WTXE_^PZ&!5T-ouvxs4%~C&~gq5rbE$ zmm7b0`y}H<*!z5wBM!NQR>j5Ek9wS+%L(mtxPg!Ay(|rW#weY0_&I|r&EdQ1g`hqX z2a<{?uO`WBcYvxd9y9@jlDkBY8U+kE);aUDkT6}G)~O!t?SWOGmDgxSt|Pp9R_n-c z1WLN(R^~#%RV#pbxnk^0nggP#Aup=BtE28s348n(SK5H*TE`4PTZMJnJrmO96kz#X z1qsG{55d)6h9kq?NFH~S#d#7FP)ty8ev~x&1vPM{RM*a~{85NlQ*1HTZBA9k|E4^p zZ{MNop+B1VEx2<+juJiV(JbiCY$O{$;Fp6^snbj3p~I$!2yTU=6O%y+G;*3mGvGT+ ztX~1cfXpJ&{Ko#Ij>-y6@ELn)n#bN?%5(n+3jZ{!&9w7z(&-lQFmS1qCV4Dz+zv^fUqEj7edX4u_BEwFBf_HkdVQ zZ94=}yHTlodou|ij;Y;LilFl+sN*|xWh>X#0yGV(;`}2-K|h#_GsmFrCH@xCjRV=& zexr9rkK$V5Sdd^1mO2vjYGr38EGuC20l@Fmj6az4E#js1nys@WdH4}HptQ&Yb(R34 zOYzFYv^jc0oMrWtJ3vOK-q}}&n!;}|9cGZ8+vX6)B2JGl3svapHfWT8y3Uk**GL^N zb7XR6Ucx+sWh%)s7O+{ESI=wp6;Eyl5NJ5erMPFtT%Sa9kHWZEUsek0NDluR2>BBu zUE#tVHpdrr^SWPhq*;AL{W4$nY<)QnwltuVFuLJ~!1{!dy-yFRr{8o+<>^PFu;L#d z_Ray~XYC+f>gC$2;V2Sj=GL+*w2&%-h@P#%B;=5A68OOOh(49UHFR)H6+u|&BE_5u zND86cQ9NXT1q)d!{mBV1B`5y$wCEq!;zgCS1o5o_?@l%K8xUuZY9J&y93HnF@hS;c zK*MA0jn?0NeTE6Q^1QVm=r$&n<=FTT)vU`Ze?&s*u#fP0@AuNGd7HeXGoUx|lF+rq zA3&5hLoVwUM9yjp$*B?#XF(?DQn#FBdH*bRlEQ6V0_z!Gvy%^c6dhyqi|Wiiu-Wr>V_24ekP|8J9WYGY?UC_S zoO3Y38{)u+`yX%e=?}h>()uY8fjP8TN2giOVr7s(KiLaUl~UNOKDGn8)NqXnhxT{dgWo3@+8Y?&;$qN z6xsw1NbfwenYxnHlK_yv8MPP4R2Jjcxf2nT2#~>;tfW%RKGD8Lf;%->d(_;W;)5Am zxdJ-?M)E|J-*%Grravy^ogbcF^|mB3Tq!&58pxInftuYgFEW4)uJi$je3jpp}@+ydOCfB$WIsCkzXBf#w<*Ppz{jr zMMrN^?J?SgiA`@h3OUfxc3PabfW8~|?dRG=Fce1Gx%+iRgU7r&zwZN+D$;3o%xPeQ zV9iB6E$d@mATCQ4fGN=*)&AaNUoxJs$NW?vfD%3iv1Z=mXi>rtS<~V~f)(GIYk<%V zgAJT;CTWfA5v~e$v`6b!Hp9eq>z8ikoDrm6PJOLFiwKu6K#yo`ONW4UwO5oAZ6PU* zFx={`WUd_#HcnytgAlA)K%i0K2A_^$h;?3bvH_8Wvu0uB9)LCvCLt~h;_UM~)G>S& zQbzzbnC;>rmeIu@n}t62y*N~GBF5|F`1vTiiGacvxuKDWaq#zqj%u3VTFJrrg=6&G zUH^QmmgP37kl;>aB-@N!q3^O02IMAJW*H>BQ6xF-YQ=ihZXrGdLx%P$8GI@+w+wB6 z0>sW$sLc;ZqaW{bZ!_u}L*3_ob)&tLQ6MBDG&0}A>ST#FJyIq!UOo22P_6NkMhI8+W$BKk&NaH)V#IizPbsI1*%_t11~!h_wd zVN>Jg;BClrt55Hwjj*vO^PNLJ=Nykz*;zd)02!mr$4`4#P-$hti}3B~^d~ zt0aWqVL+7Xt4svJ5_@!W^jvv79d7*K8F|~t*jR(mk)n9Zq%;TkEE~OF+65;D6bt_S zGv|S}c_z3v?B}ce0s4ZHMxO4c@Mg&VWSg44n#?l4h`%R09|d78GAKw1ck zlSstw6gz-JB6C`L)li+AvsK}>D12(KvE|Z8dR`kMttAU3GkSx|!hjt^_X&MoAl*aQ z<wJV zFsD0CH+D5$UjNi^P$29_uXRfNZiIJa0sfzWXd@nm{ahMv*ZRos*70yrS z{z{tHM8MPuzbKxSOrV1yef<`c4y9AkeK>S?fVNRih|gW0rQrvFDTEDesP~VQE5GB~ zt&S#r>aaVWCu&w5oDE<~n-LOmQw>?3E5w&l{V|;J8^Sg~KK6x&v?2ZPvma=qfU1X{ zR%DC_Au=-32|>)f7wXEo2$SC1!ZYDlpXkTOJ~w`T`^|L>8*|}UG%5aa%jT)9n%F&$ zZJ}8zL%sb1PI4^?r>e+cQBv@8u=o@@&ht0-zt+PjRU3siLaQpe>n=XW@+|K(r)~0}B>F??JyMY^ z&mwlS1i6%mPrii)fczpz{3Rg0<*Pf^y*YnBMkIQTA-J2{ix~l{ZH(S#-u0eJXTol- z0+N($-RvrqJd9p(u^+8J<7XMlCY;doUfF+lT90fRWGJM2iLx;h*<_@GT z@L))aDkPZ-J$_~l9QIH;o&*fjlP`2mDr{l^0sq|hh}Z8r!?8Ugn^QJsSUzF3$Mag? zF}*Exkqi0?oRo>`@G0i&_BVP`-8G?~v>wK7+6kIJ0mP@nOz5*-7r!}P%X8S{H^R!A zAB-j&9G@5Sz1&SPazUQk;Ka*UW)}SFR=ezauJd?Y1O`a2XM(hvo}KPnYigmM=!_r{ zDWC=A*dXIZbXCd}D7XtowULt~)nbYtKbjsw=P7?3m z4NDF}e(w>20obfNZ@ue=g4TNk*zD9+ZdBWzFc% zS|LSzyY$P@65a9^zvHIwXPvv00|4^kH6cT|H|zeUqHzO-UZXg5^VsAPDUj#*8c>d+ zxrRV+@AlHHv#H)c0o%%RCFi}#9@jcOSW2qZ-KeCh-zfsGo2EeZ`3>N(Ib@qPLpEs zRfQxXTGV!YP8G&&flw|&479qU)rbdTnrbPT1zs#t7aUdat=;pyJhvIt5Fz%PrjMBH`=7o*+nUlW8{q6nv&q;tlaU0K)5Yj0@ zXfalq@ea~vgll-Ito?WZE)Y)=X0rMVFG##OT^^!$(@Spws7O!k&Vigtf}$q{?Ov?C zWgrR0$rE;|E_&n~`MGbOm23kzV;8;JxM9q_@iLhg+u2NP%ghkas#7c`0kNr!Ti9

u;ydKwlh zL!|X2x8BCDb5!3}B6Ao-{*&=m{-`Io{w%ojt;#m7TctAf;_*UhV(sJfqCB3%+*a)? z&51x04aP=Rv@gRK)M64LBi*2$wdAyvy_0oKjewa?^YOgq6|o;M!3XmxD-YLH-fN+J zlt6m|+xaF6SDvcJPp!Ui2BEk~?hWUO51;?YpdtuD&Pw zj#{29wHzNMkwCxn`S?%Y>6%0^F~LmV7Ar6yM8~q=B2EPs;}macQXm)mX`;|sfg@bu zQ?!kJ_CDS*osI=q<+VfTULYl)>*A~Dn%xaDi&C-~re znuF4%gy2zHt}Cq2L3QQx>y4+Xq7P;B=JvIlu|m}0)J*vKjg6oBUw-QSGS7(G@91_~ zN(@J#g&bjzrm}_vn)13W^k%Km#v`8i(R%@XuIi*;;1G^nO^M=}@%!$l8jG)b*49eb zcMi0drZzk_JO>lSF8v%8SH?l}IO!O#cyXi`&6`8$aOw4JusLwWae)(jmk8tE0IF>I zc1dD1#sTD0ePb|tI?+Oh?ro*EeVCAN@cHnlJXQHA^0f8Ov$NE+)b8S~NrDc3?ikLZ zZaV*mdrwH|qGS};w9^-I&tT@mf$w?LNFpe#EA%6JXxZ6rV-xvgk8!sc0Ops8{ZJyg zKyk(T9;fi-n&jv@}tXc4|+b<3ml59bO9J`?Lncw%f9~8T?*E;0|yHNIcbJt5T`qYOD_S+=F z84~JUSU)3d)$sG=G9gAC=v?rGO@et+Zo3P>KOYfH4nD?{YsCls``j>o)E+-LRd}aQ z0q`uB+=31~pW5aLxh(z5tMm#v*>2ya=I}yf!)~xJk?S1>-V%!{;!Uq9TpC?SME5Tp(QlD87DkNAL(Z2FePP26i;QYG@P(Lq8Cxy$QCKMGWi<*0 zMSZcK7^8)|SGp~9C$1|pae(mXIu>JFj0NwQH!c-uQ*f?7wTRP44G};ycfnISL_IHD z?4_mNJzASW!3kwx0d;BR*iv{(B&m*DM37bUgk4QaDr5YTyFgx=TCOjRS#)j0;zg4k zNdkhmIVr;lwoXQr!eXn*0k;U7&S?x!gZV49EJ5ulQC~U_%R|8u`c+Hw#Q`6T-xF9= zG}+BNo0^fXk_hMu-5LCGWB?n$G~W|5^5J;W z)XoK548J@hlIr4@Z#~56#pflSrd6*Y;v*=QtyUd(e@Lnz*a`lI?aM`^Jg^kpBuFh{ z*|R8`RT^)k$%QCZ!!l*D6~-JnT8`OSgTsTX}={k zZJTOtMjdLOs2|+MF*C_1mg&RmaHJceM58LZGlB;3i!ddvbJAV-Ni52n%WIa?Igc8w zO!HMnYi!C2DU8SUg@0-llAm_%@}}f9eJI3;3jyv8b*H0_7V4e19nKu{u5s&(B^Be*sJt!{-M@>;fvb67{>>-bRXQeZ|ju_HVKB^0J8Gqsj>Z zju-o!n!%!pY|~A7!wW}mLUxkin6H`z<5v1J!97;3ycv_Qz^{rTq)W(6J}-O8Csnd< zMCmf=BDEQUo19x~+0vsD@3FeP$&3*i26%&oqEg9bFM(bC?FWQ*~CK6PK?pPoaOa6|`@s8B!f4$G(I(^LJZIV>P_YpCL7Io!1Cd0OP02r)G79g^<%Y5iTrD1Da@!CiNs`iGU|pt21;%gJVsv17^6liYYn1Kb7YI3M^d80mmCG-8tDFLm7d*P+)n39@yC4Se;F8$vj!db9;ds z1(l%x)ZpKeaeVtWpCh)KND^}S>)7t6ngZDk4n4|caoH2O<9BqQ%0D#42J<~b^%hX8 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 +}); +// 也可以对某个级别设置单独的LogStream +builder.set_log_stream_creator(LogSeverity::INFO, [] { + auto ls = ... + return std::unique_ptr(ls); +}); +// 设置最低日志等级,低于最低等级无论设置与否都会按照空LogStream处理 +// 同时日志宏包装也会识别最低等级进行整段流操作符的省略 +// LogSeverity包含{DEBUG, INFO, WARNING, FATAL}四个等级 +builder.set_min_severity(LogSeverity min_severity); + +// 按照设置实际构造一个可以使用的Logger +Logger logger = builder.build(); + +// 使用logger,打印置顶级别的日志 +// ***部分可以追加其他业务通用头,也同样遵守noflush时只输出一次的规则 +// ...部分是正常的日志流输入 +BABYLON_LOG_STREAM(logger, INFO, ***) << ... +``` + +## LoggerManager + +LoggerManager维护了层级化的Logger树,初始化阶段用来配置,运行时用来获取获取各个层级节点的Logger,配置和运行阶段通过明确的初始化动作完成转换 +- 未配置的Logger树,获取到的Logger表现为默认行为,输出到标准错误 +- Logger初始化后,所有之前获取的表现为默认行为的Logger会切换到实际被初始化的真实Logger,过程中是线程安全的 +- 可以动态向Logger树增加节点Logger或者改变日志等级,过程中也是线程安全的 + +### 用法示例 + +```c++ +#include "babylon/logging/logger.h" + +using babylon::LoggerManager; + +// LoggerManager通过全局单例使用 +auto& manager = LoggerManager::instance(); + +// 根据name取得某个层级的logger +// name根据层级查找配置,例如对于name = "a.b.c" +// 会依次尝试"a.b.c" -> "a.b" -> "a" -> root +// 层次同时兼容"a::b::c" -> "a::b" -> "a" -> root +auto& logger = manager.get_logger("..."); +// 直接取得root logger +auto& root_logger = manager.get_root_logger(); + +// 在任何设置动作发生之前,取得的Logger都是默认状态,全部输出到标准错误 + +// 构造计划生效的builder +LoggerBuilder&& builder = ... +// 设置root logger +manager.set_root_builder(builder); +// 设置某个层级的logger +manager.set_builder("a.b.c", builder); +// 所有设置只有在apply之后才会统一生效 +manager.apply(); + +// 完成设置后,『之前』取得的Logger也会从默认状态,变更为正确的状态 +// 变更过程是线程安全的,正在使用中的Logger也会被正确处理 +// 『之后』取得的Logger直接就会是正确设置的状态 + +// 默认宏内部也会使用root logger +BABYLON_LOG(INFO) << ... +// 使用指定的logger +BABYLON_LOG_STREAM(logger, INFO) << ... + +// 一般在语句结束后,就会视为结束进行日志提交 +// 支持使用noflush来进行渐进组装 +BABYLON_LOG(INFO) << "some " << ::babylon::noflush; +BABYLON_LOG(INFO) << "thing"; // 输出[header] some thing + +// 支持类printf格式化功能,底层由abseil-cpp库提供支持 +BABYLON_LOG(INFO).format("hello %s", world).format(" +%d", 10086); +``` diff --git a/registry/modules/rules_cuda/0.2.2-dev/MODULE.bazel b/registry/modules/rules_cuda/0.2.2-dev/MODULE.bazel deleted file mode 100644 index 315989f7..00000000 --- a/registry/modules/rules_cuda/0.2.2-dev/MODULE.bazel +++ /dev/null @@ -1,17 +0,0 @@ -module( - name = "rules_cuda", - version = "0.2.2-dev", - compatibility_level = 1, -) - -bazel_dep(name = "bazel_skylib", version = "1.4.2") -bazel_dep(name = "platforms", version = "0.0.6") - -cuda = use_extension("@rules_cuda//cuda:extensions.bzl", "toolchain") -use_repo(cuda, "local_cuda") - -register_toolchains( - "@local_cuda//toolchain:nvcc-local-toolchain", - "@local_cuda//toolchain/clang:clang-local-toolchain", - "@local_cuda//toolchain/disabled:disabled-local-toolchain", -) diff --git a/registry/modules/rules_cuda/0.2.2-dev/source.json b/registry/modules/rules_cuda/0.2.2-dev/source.json deleted file mode 100644 index 334605a7..00000000 --- a/registry/modules/rules_cuda/0.2.2-dev/source.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "url": "https://github.com/bazel-contrib/rules_cuda/archive/3482c70dc60d9ab1ad26b768c117fcd61ee12494.tar.gz", - "strip_prefix": "rules_cuda-3482c70dc60d9ab1ad26b768c117fcd61ee12494", - "integrity": "sha256-x78dpBtaMUgKBHf0ztSe7QirHLOv93xwTjc8+cUmlPU=" -}