log4j2 仅记录到控制台
log4j2 logging to console only
我有一个需要日志记录的 maven web 项目。
我决定为此目的使用 log4j2 并在 pom.xml
文件中添加了所需的条目
然后我创建了 log4j2.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingFile name="RollingFile" fileName="${logs.path}/text.log"
filePattern="${logs.path}/%d{YYYYMMdd}-text.%i.log">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
<Policies>
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="root" level="info" additivity="false">
<appender-ref ref="RollingFile" level="info" />
<appender-ref ref="Console" level="info" />
</Logger>
<Root level="info" additivity="false">
<AppenderRef ref="RollingFile" />
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
我从 -Dlogs.path="C:\mylogs"
开始 tomcat,其中 C:\mylogs
存在并且具有 public read/write 访问权限。
控制台记录器工作正常,我可以在我的控制台中看到正确的输出,问题是文件没有被创建,所以我没有日志文件,一切都只记录到 catalina.out
,并且 tomcat 启动日志不显示 log4j 的错误。
我错过了什么?我需要做一些额外的配置才能登录到文件吗?
要使用 log4j2 配置创建日志文件,您首先需要定义附加程序。这是一个例子:
<RollingFile name="MGMT"
fileName="${logdir}/mgmt.log"
filePattern="${logdir}/mgmt.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${layout}"/>
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
<DefaultRolloverStrategy>
<Delete basePath="${logdir}" maxDepth="1">
<IfFileName glob="mgmt.*.log" />
<IfAccumulatedFileCount exceeds="10" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
之后你只需要定义一个将使用它的记录器:
<Logger name="the package or name that is displayed in the log line"
level="ALL"
additivity="false">
<AppenderRef ref="MGMT"/>
</Logger>
如果您有一个包含 com.company.test
作为包的日志,请将该包设置为记录器的名称。 它们匹配很重要。
字段 additivity
将定义您是要将捕获的日志传递给它的父级 (true) 还是让此记录器处理它 (false)
编辑:
您的配置文件可能需要这个:
<Configuration status="info">
<Properties>
<Property name="logdir">${sys:catalina.base}/logs</Property>
<Property name="layout">%d [%t] %-5p %c- %m%n</Property>
</Properties>
<Appenders>
如果你不想使用它,你必须像 <RollingFile name="MGMT"
fileName="C:\path\file.log"
一样定义静态路径
我经历了 documentation。您必须使用 sys:
来引用系统属性,并且似乎 tomcat 属性被视为系统属性,所以我将 ${logs.path}
替换为 ${sys:logs.path}
并且有效。
我有一个需要日志记录的 maven web 项目。
我决定为此目的使用 log4j2 并在 pom.xml
文件中添加了所需的条目
然后我创建了 log4j2.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingFile name="RollingFile" fileName="${logs.path}/text.log"
filePattern="${logs.path}/%d{YYYYMMdd}-text.%i.log">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
<Policies>
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="root" level="info" additivity="false">
<appender-ref ref="RollingFile" level="info" />
<appender-ref ref="Console" level="info" />
</Logger>
<Root level="info" additivity="false">
<AppenderRef ref="RollingFile" />
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
我从 -Dlogs.path="C:\mylogs"
开始 tomcat,其中 C:\mylogs
存在并且具有 public read/write 访问权限。
控制台记录器工作正常,我可以在我的控制台中看到正确的输出,问题是文件没有被创建,所以我没有日志文件,一切都只记录到 catalina.out
,并且 tomcat 启动日志不显示 log4j 的错误。
我错过了什么?我需要做一些额外的配置才能登录到文件吗?
要使用 log4j2 配置创建日志文件,您首先需要定义附加程序。这是一个例子:
<RollingFile name="MGMT"
fileName="${logdir}/mgmt.log"
filePattern="${logdir}/mgmt.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${layout}"/>
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
<DefaultRolloverStrategy>
<Delete basePath="${logdir}" maxDepth="1">
<IfFileName glob="mgmt.*.log" />
<IfAccumulatedFileCount exceeds="10" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
之后你只需要定义一个将使用它的记录器:
<Logger name="the package or name that is displayed in the log line"
level="ALL"
additivity="false">
<AppenderRef ref="MGMT"/>
</Logger>
如果您有一个包含 com.company.test
作为包的日志,请将该包设置为记录器的名称。 它们匹配很重要。
字段 additivity
将定义您是要将捕获的日志传递给它的父级 (true) 还是让此记录器处理它 (false)
编辑:
您的配置文件可能需要这个:
<Configuration status="info">
<Properties>
<Property name="logdir">${sys:catalina.base}/logs</Property>
<Property name="layout">%d [%t] %-5p %c- %m%n</Property>
</Properties>
<Appenders>
如果你不想使用它,你必须像 <RollingFile name="MGMT"
fileName="C:\path\file.log"
我经历了 documentation。您必须使用 sys:
来引用系统属性,并且似乎 tomcat 属性被视为系统属性,所以我将 ${logs.path}
替换为 ${sys:logs.path}
并且有效。