在我的 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
,其中定义了两个附加程序 stdout
和 stash
,它们都附加到根目录:
<?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
登录哪个附加程序?具体来说,在根目录中附加了 stdout
和 stash
后,我如何才能仅登录到 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/