我有一个log4j2.xml文件,我配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="log-path">${sys:catalina.base}/logs</Property>
</Properties>
<Appenders>
<!-- console appender -->
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} - %msg%n"/>
</Console>
<!-- file appender -->
<RollingFile name="commons-log" fileName="${log-path}/commons.log"
filePattern="${log-path}/commons-%d{yyyy-MM-dd}.log">
<!-- log pattern -->
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<!-- set file size policy -->
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
</RollingFile>
<RollingFile name="analytics-log" fileName="${log-path}/analytics.log"
filePattern="${log-path}/analytics-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.test.app" level="debug" additivity="false">
<appender-ref ref="commons-log" level="debug"/>
<appender-ref ref="analytics-log" level="warn"/>
<appender-ref ref="console-log" level="debug"/>
</Logger>
<Root level="info" additivity="false">
<AppenderRef ref="console-log"/>
</Root>
</Loggers>
现在,我想自定义将数据记录到commons中。日志和分析。日志文件。
java中的示例:
private static final Logger logCommon = LogManager.getLogger("commons-log");
private static final Logger logAnalytics = LogManager.getLogger("analytics-log");
我想在需要时自定义将日志写入每个文件,例如:
logCommons.info ("Need it save into commons.log file");
logAnalytics.info ("Only save into analytics.log file");
问题:我怎么做?请帮助我解决log4j2中的所有问题。xml文件和Java代码示例。
谢谢!
您可以按如下方式配置记录器:
String log4jfile = topDir + "log4j2.xml";
PropertyConfigurator.configure(log4jfile);
其中log4jfile是要使用的配置文件的路径。如果不这样做,它只会有默认行为。
我认为问题来自于这样一个事实,即你有你所有的应用程序ref在一个记录器。
此外,记录器名称根据您在java代码中给记录器的名称过滤日志条目。
您在示例中使用了:
private static final Logger logCommon = LogManager.getLogger("commons-log");
private static final Logger logAnalytics = LogManager.getLogger("analytics-log");
所以,你的伐木工人需要有相同的名字。您可以做的是:
<Logger name="com.test.app" level="debug" additivity="false">
<appender-ref ref="console-log" level="debug"/>
<!-- you can put other appender references here if you want to log you
app logs in a specific file -->
</Logger>
<Logger name="commons-log" level="debug" additivity="false">
<appender-ref ref="commons-log" level="debug"/>>
</Logger>
<Logger name="analytics-log" level="debug" additivity="false">
<appender-ref ref="analytics-log" level="warn"/>
</Logger>
这样,它将根据日志记录者的名称将日志拆分为不同的文件。
希望有帮助!
如下所示,您正在向同一记录器中的两个文件写入调试日志
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="log-path">${sys:catalina.base}/logs</Property>
</Properties>
<Appenders>
<!-- console appender -->
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} - %msg%n"/>
</Console>
<!-- file appender -->
<RollingFile name="commons-log" fileName="${log-path}/commons.log"
filePattern="${log-path}/commons-%d{yyyy-MM-dd}.log">
<!-- log pattern -->
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<!-- set file size policy -->
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
</RollingFile>
<RollingFile name="analytics-log" fileName="${log-path}/analytics.log"
filePattern="${log-path}/analytics-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.test.app.commons" level="debug" additivity="false">
<appender-ref ref="commons-log" level="debug"/>
<appender-ref ref="analytics-log" level="warn"/>
</Logger>
<Logger name="com.test.app.console" level="debug" additivity="false">
<appender-ref ref="console-log" level="debug"/>
<appender-ref ref="analytics-log" level="warn"/>
</Logger>
<Root level="info" additivity="false">
<AppenderRef ref="console-log"/>
</Root>
</Loggers>
问题内容: 现在,我正在使用如下结构:Appender: 记录器: 但是它不适用于MDC密钥。如何在xml中使用MDC密钥配置RollingFileAppender? 问题答案: 看一下RoutingAppender。也许这可以帮助您入门:
我使用的是,试图将不同的日志消息发送到同一个记录器中的不同appender。这种情况在log4j2常见问题解答中有详细描述,但我需要使用log4j2。属性配置文件,而不是示例中给出的XML配置。 这里给出了另一个XML配置文件的例子——本质上,我不知道如何指定行 在语法。
现在我使用这样的结构:Appender: 记录器: 但它不适用于MDC密钥。如何使用xml中的MDC键配置RollingFileAppender?
问题内容: 我习惯在普通的log4j上使用。现在,我切换到,无法使附加程序正常工作。 下面的附加程序可以正常工作。但是永远不会创建的日志文件。为什么? 问题答案: 该标记缺少属性。
我一直在尝试遵循这个网站和其他网站上的食谱,了解如何将log4j2 FileAppender实例添加到使用SLF4J API进行整体日志记录的类中,但我运气不佳。有人能告诉我下面的代码哪里出错了吗? assertTrue语句通过,因此文件由FileAppender创建,但assertEquals失败,因为日志线的长度为零(即日志文件没有内容)。 有什么想法吗?