logging - 如何决定哪些附加程序对 `clojure.tools.logging` 的日志进行操作?

标签 logging clojure logback

在我的 project.clj :dependencies 中,我有:

[org.clojure/tools.logging "0.2.6"]
[ch.qos.logback/logback-classic "1.0.11"]
[net.logstash.logback/logstash-logback-encoder "1.0"]

在我的core.clj中,我有:

(clojure.tools.logging/info "both stdout and stash")
(clojure.tools.logging/log "stash" :info nil "only stash?")

在我的资源路径上,我有一个文件 logback.xml,其中定义了两个附加程序 stdoutstash ,它们都附加到根目录:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="stash" class="ch.qos.logback.core.FileAppender">
    <file>example.log</file>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
  </appender>

  <root level="all">
    <appender-ref ref="stash" />
    <appender-ref ref="stdout" />
  </root>

</configuration>

当我运行程序时,我在 example.log 中看到以下(所需的)输出:

{"@timestamp":"2013-04-10T12:42:16-04:00","@message":"both stdout and stash","@fields":{"logger_name":"scheduler.core","thread_name":"main","level":"INFO","level_value":20000}}
{"@timestamp":"2013-04-10T12:42:16-04:00","@message":"only stash?","@fields":{"logger_name":"stash","thread_name":"main","level":"INFO","level_value":20000}}

但是,我看到以下两行打印到标准输出 - 我只想看到第一行:

12:42:16.573 [main] INFO  scheduler.core - both stdout and stash
12:42:16.641 [main] INFO  stash - only stash?

如何选择使用 clojure.tools.logging 登录哪个附加程序?具体来说,在根目录中附加了 stdoutstash 后,我如何才能仅登录到 stash

最佳答案

logback 应用所有事件的附加器,这些附加器不仅匹配第一个附加器,因此您的根级别将应用于所有消息。
采取<appender-ref ref="stdout" />脱离根级别并添加一个专门使用它的记录器。

 <logger name="project.core" level="INFO"> 
    <appender-ref ref="stash" /> 
  </logger>

 <root level="ERROR"> 
    <appender-ref ref="stdout" />
  </root> 

关于logging - 如何决定哪些附加程序对 `clojure.tools.logging` 的日志进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15931881/

相关文章:

logging - (为什么)log4net 不再开发了吗?

python - 如何覆盖另一个库中的现有记录器?

clojure - 为什么 'for' 不能在 'go' 内部工作?

Android Logback - 在应用程序崩溃时将堆栈跟踪存储到日志文件中

java - 对 logback 中的特定记录器使用不同的模式

ios - 在ios模拟器中查看Console.log

c# - 跨多个应用程序域进行日志记录

javascript - 将 JavaScript websql 转换为 Clojurescript

clojure - Clojure 中的线程注释

java - 使用相同的附加程序记录多个记录器