我正在使用log4j 2.我试图确定为什么我的日志文件没有写入,但我的控制台是。这是我对控制台的输出:
2016-04-25 12:26:07,142 INFO [main] helperCode.LogPlus (LogPlus.java:50) -
----------------------------------------------------------------------------
------------ The test is starting now at 2016-04-25-12-26-07-135 -----------
----------------------------------------------------------------------------
2016-04-25 12:26:07,151 INFO [main] helperCode.LogPlus (LogPlus.java:50) -
--------------------------------------------------------------------------
------------ METHOD loginBadPasswordGoodUsername_3 starting: ------------
--------------------------------------------------------------------------
我已经考虑过的问题:
这是我的XML配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<File name="FileLogger" fileName="${sys:logFilePath}" append="false">
<PatternLayout pattern="%d %t %-5p %c{2} - %m%n" />
</File>
<Async name="Async">
<AppenderRef ref="FileLogger" />
</Async>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="automationFramework" level="trace">
<AppenderRef ref="FileLogger" />
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT" />
</Root>
</Loggers>
</Configuration>
我将输出定向到位于系统变量&#34; logFilePath&#34;的文件。
我不确定发生了什么,并且类似问题的答案中显示的配置文件不是XML格式,因此我不确定如何将配置文件代码传递给XML。
答案 0 :(得分:2)
在评论中提到的情况下,您没有名为applicatiionFramework的软件包。因此,请根据要记录日志事件的类的包名更改name属性。
<Logger name="your package" level="trace">
<AppenderRef ref="FileLogger" />
<Root level="trace">
<AppenderRef ref="STDOUT" />
</Root>
</Logger>
有关详细信息,请访问log4j-manual-configuration
答案 1 :(得分:0)
很高兴另一个答案有所帮助。你需要命名的记录器吗?为什么不只有根记录器?此外,您声明了Async Appender但未使用它。这是故意的吗?这就是我的建议:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<File name="FileLogger" fileName="${sys:logFilePath}" append="false">
<PatternLayout pattern="%d %t %-5p %c{2} - %m%n" />
</File>
<Async name="Async">
<AppenderRef ref="FileLogger" />
</Async>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</Console>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="STDOUT" level="info" />
<AppenderRef ref="Async" />
</Root>
</Loggers>
</Configuration>
请注意,您还可以在AppenderRef
上指定级别。我使用Console Appender级别INFO来说明这一点。
如果您希望日志显示位置信息并使用异步记录器或追加器,则需要在Async Appender上指定includeLocation="true"
。
答案 2 :(得分:0)
对于完整的菜鸟,就像我一样,这条线在上面的未知答案中
<Logger name="your package" level="trace">
是关键。当它说&#34;你的包裹&#34;它真的意味着&#34;包foo.bar&#34;您在创建Logger的.java文件的顶部声明,而不是您为创建Logger而传递的类名,如:
LOGGER = LogManager.getLogger(MyClass.class.getName());
我今天花了很多时间才把我的log4j2输出转到一个文件,玩各种&#34;名称&#34;直到灯泡亮起的价值观。