以下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>
答案 0 :(得分:1)
您的代码如何获取Logger实例?假设你的代码看起来像这样:
Logger log = LogManager.getLogger(com.mycompany.MyClass.class);
log.info("Where is my message?");
请注意,记录器的完全限定名称为"com.mycompany.MyClass"
。
此记录器将向根记录器以及名称与"com.mycompany.MyClass"
匹配的所有命名记录器发送消息。以下配置名称将与此完全限定类匹配:
<Logger name="com.mycompany.MyClass" ...>
<Logger name="com.mycompany" ...>
<Logger name="com" ...>
但是,配置中的命名记录器仅匹配"mylogger"
,因此此记录器不会收到“我的消息在哪里?”记录事件。根记录器将获取事件并将其发送到其控制台appender。