我想做两件事:
控制台日志记录似乎工作得很好,但日志文件仍然是空的.
这是我的log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="logs/app.log" immediateFlush="true">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<logger name="filelogger" level="error">
<appender-ref ref="MyFile"/>
</logger>
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)
可能有什么问题?
dak*_*ker 61
我想到了!该<Logger>标签不应该在这种情况下使用,请参阅GAURANG帕特尔对细节的答案.
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console" level="info"/>
<appender-ref ref="MyFile" level="error"/>
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Gau*_*tel 17
虽然Daker已经提供了更正的配置文件,但他没有解释.我想在这里补充说明.作为Log4j2文档引述这里,<记录仪>的使用并不需要对给定需求的标签.你应该使用<Logger>标签吗?从文档中阅读以下说明,
也许希望从com.foo.Bar之外的所有内容中删除所有TRACE输出.简单地更改日志级别将无法完成任务.相反,解决方案是在配置中添加新的记录器定义:
<Loggers>
<Logger name="com.foo.Bar" level="TRACE"/>
<Root level="ERROR">
<AppenderRef ref="STDOUT">
</Root>
...
</Loggers>
Run Code Online (Sandbox Code Playgroud)
总结其他人 ( @basiljames, @daker, @Jay Taylor) 在这里回答:
log4j2.xml配置我的情况:
log4j2 版本: 2.13.0
log4j2.xml 配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<File name="FILEOUT" fileName="your_log_filename.log" append="false">
<PatternLayout>
<Pattern>%d{yyyyMMdd HH:mm:ss} %-5p [%t] %C{2} %F%L - %m%n</Pattern>
</PatternLayout>
</File>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p %F:%L - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="FILEOUT" level="debug"/>
<AppenderRef ref="STDOUT" level="info"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
A:正如官方文档也提到的,核心部分:
<Root level="debug">
<AppenderRef ref="FILEOUT" level="debug"/>
<AppenderRef ref="STDOUT" level="info"/>
</Root>
Run Code Online (Sandbox Code Playgroud)
可以达到:
基于:
DEBUG放:
File 水平到 DEBUGConsole 水平到 INFO@Stealth Rabbi?那么问题是什么?A:原来的主要问题是:
这是name="filelogger"在:
<logger name="filelogger" level="error">
<appender-ref ref="MyFile"/>
</logger>
Run Code Online (Sandbox Code Playgroud)
因为通常记录器名称是您的类名,例如
<Logger name="com.foo.bar" level="error">
<AppenderRef ref="MyFile"/>
</Logger>
Run Code Online (Sandbox Code Playgroud)
另一个可能的小问题是:
error,因此文件已创建但为空当将文件级别设置为error,但您的日志代码级别较低时,例如
logger.debug("output something");
Run Code Online (Sandbox Code Playgroud)
那是:
代码中的记录器杠杆(debug) <文件级别(error)
所以调试内容不会输出到日志文件,日志文件保持为空。
@Bendemann如果我在 tomcat 服务器上运行 war 文件,是否可以指定要保存文件的路径?答:是的。只需将相对或绝对日志文件路径设置为File's fileName。
就像:
<Appenders>
<File name="FILEOUT" fileName="/your/path/your_log_filename.log" append="false">
...
Run Code Online (Sandbox Code Playgroud)
没问题。
<logger name="filelogger" level="error" >
这应该是问题所在.记录器的名称通常是您的包名(除非您专门命名filelogger).
尝试<logger name="com.yourpackage" level="error" additivity="true">