【发布时间】:2014-11-25 13:18:27
【问题描述】:
我正在尝试在某个包中为每个类设置单独的日志记录文件。我找到的最接近的解决方案是使用 RoutingAppender 并为那些在调用 getLogger 方法时添加到 ThreadContext 的某些类使用特殊的 getLogger。但是,此解决方案不会创建任何新的日志文件。我一直在阅读 stackoverflow 条目和 log4j2 文档,但不明白我哪里出错了。这是我看过的一些条目/文档
- Log4j2: Dynamic creation of log files for multiple logs
- How to write different logs in different files with log4j2 (MDC in xml)?
- Log4j2 separate log files by module name
- http://logging.apache.org/log4j/2.x/faq.html#separate_log_files
- http://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender
- http://logging.apache.org/log4j/2.x/manual/lookups.html#ContextMapLookup
谁能帮我理解为什么我没有任何 className 日志文件?
这是我的 log4j2.xml 中的相关例外:
<Routing name="Routing">
<Routes pattern="$${ctx:className}">
<Route>
<File name="testCaseLog"
fileName="${ctx:className}.log">
<PatternLayout
pattern="%d{HH:mm:ss} %-5p [%t] %c{1} - %m%n" />
</File>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
(other loggers)
<Root level="info">
<AppenderRef ref="stdout" />
<AppenderRef ref="Routing"/>
</Root>
</Loggers>
这是我在 myUtils 类中的记录器函数的一点点
public static Logger getLogger(String className) {
ThreadContext.put("className", className);
//This is using the slf4j LoggerFactory. I'm starting to think this might be the problem, but I can't get away from slf4j
Logger log = LoggerFactory.getLogger(className);
return log;
}
这是来自需要它自己的日志文件的类之一的调用:
private final static Logger log = myUtils.getLogger(OpenTest.class.getName());
【问题讨论】:
-
您在 INFO 级别登录?使用此配置,附加程序将不会接收 TRACE 和 DEBUG 日志事件...此外,
<Root>元素是否嵌套在<Loggers>包含元素中? -
我可以更改日志级别,但我们的大部分使用都在信息级别。我可以在控制台中看到调用 myUtils.getLogger 的类中有 cmets,但没有合适的文件。根记录器位于
元素中。我们的配置还有其他我认为不相关的 Logger。