log4j2 不写入登录文件
log4j2 doesnt write log in files
以下 XML 配置是我的 log4j 配置,我在控制台中看到了日志消息,但日志文件是空的,它有什么问题吗?
我正在使用 log4j-api-2.1
<Properties>
<Property name="log-path">logs</Property>
</Properties>
<Appenders>
<RollingFile name="file-log" fileName="${log-path}/logtile.log/"
filePattern="${log-path}/logtile-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
<SizeBasedTriggeringPolicy size="500" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="mylogger" level="info" additivity="false">
<appender-ref ref="file-log" level="info" />
<appender-ref ref="Console" level="info" />
</Logger>
<Root level="info">
<appender-ref ref="Console" />
</Root>
</Loggers>
你的代码是如何获取Logger实例的?假设您的代码如下所示:
Logger log = LogManager.getLogger(com.mycompany.MyClass.class);
log.info("Where is my message?");
请注意,您的记录器的完全限定名称是 "com.mycompany.MyClass"
。
此记录器将向根记录器以及名称匹配 "com.mycompany.MyClass"
的所有命名记录器发送消息。以下配置名称将匹配此完全限定的 class:
<Logger name="com.mycompany.MyClass" ...>
<Logger name="com.mycompany" ...>
<Logger name="com" ...>
但是,您配置中的命名记录器仅匹配 "mylogger"
,因此该记录器将不会收到 "Where is my message?" 日志事件。根记录器将获取事件并将其发送到它的附加程序,即控制台。
以下 XML 配置是我的 log4j 配置,我在控制台中看到了日志消息,但日志文件是空的,它有什么问题吗?
我正在使用 log4j-api-2.1
<Properties>
<Property name="log-path">logs</Property>
</Properties>
<Appenders>
<RollingFile name="file-log" fileName="${log-path}/logtile.log/"
filePattern="${log-path}/logtile-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
<SizeBasedTriggeringPolicy size="500" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="mylogger" level="info" additivity="false">
<appender-ref ref="file-log" level="info" />
<appender-ref ref="Console" level="info" />
</Logger>
<Root level="info">
<appender-ref ref="Console" />
</Root>
</Loggers>
你的代码是如何获取Logger实例的?假设您的代码如下所示:
Logger log = LogManager.getLogger(com.mycompany.MyClass.class);
log.info("Where is my message?");
请注意,您的记录器的完全限定名称是 "com.mycompany.MyClass"
。
此记录器将向根记录器以及名称匹配 "com.mycompany.MyClass"
的所有命名记录器发送消息。以下配置名称将匹配此完全限定的 class:
<Logger name="com.mycompany.MyClass" ...>
<Logger name="com.mycompany" ...>
<Logger name="com" ...>
但是,您配置中的命名记录器仅匹配 "mylogger"
,因此该记录器将不会收到 "Where is my message?" 日志事件。根记录器将获取事件并将其发送到它的附加程序,即控制台。