问题描述
在Struts 2应用程序中,我们使用log4j进行记录.我只想记录警告,但是当我尝试在log4j.properties
中使用时log4j.rootLogger=warn, stdout
它也打印错误和致命日志.我只想警告日志.我阅读了一些教程中的日志级别.因此,我知道为什么错误和致命的印刷品,因为它们的优先级不如警告.如何仅在我的控制台中打印log?
我的Java代码:
import org.apache.log4j.Logger; public class LogClass { private static final org.apache.log4j.Logger log = Logger.getLogger(LogClass.class); public static void main(String[] args) { log.trace("Trace"); log.debug("Debug"); log.info("Info"); log.warn("Warn"); log.error("Error"); log.fatal("Fatal"); } }
任何帮助将不胜感激!
推荐答案
使用 过滤器.您的XML配置文件可能是:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="warn-out" class="org.apache.log4j.FileAppender"> <param name="File" value="warn.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="warn" /> <param name="LevelMin" value="warn" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="warn" /> <param name="LevelMin" value="warn" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <root> <level value="warn" /> <appender-ref ref="warn-out" /> <appender-ref ref="console" /> </root> </log4j:configuration>
有关更多选项,请GO 在这里..
看起来属性文件配置不支持过滤器.以下是从log4j的官方Wiki中获取的:
编辑:在XML中添加了控制台Appender,并关闭了log4j的调试.现在它应该转到文件和控制台.
问题描述
In Struts 2 application we use log4j for logging. I want to log only warn but when i try to use in my log4j.properties
log4j.rootLogger=warn, stdout
it prints error and fatal log too. I want only warn log. I read the levels of log in some tutorials. So I know why error and fatal prints, because they are less priority than warn. How to print warn log only in my console?
My Java code:
import org.apache.log4j.Logger; public class LogClass { private static final org.apache.log4j.Logger log = Logger.getLogger(LogClass.class); public static void main(String[] args) { log.trace("Trace"); log.debug("Debug"); log.info("Info"); log.warn("Warn"); log.error("Error"); log.fatal("Fatal"); } }
Any help will be greatly appreciated!
推荐答案
Use the org.apache.log4j.varia.LevelRangeFilter filter. Your XML configuration file could be:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="warn-out" class="org.apache.log4j.FileAppender"> <param name="File" value="warn.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="warn" /> <param name="LevelMin" value="warn" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="warn" /> <param name="LevelMin" value="warn" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <root> <level value="warn" /> <appender-ref ref="warn-out" /> <appender-ref ref="console" /> </root> </log4j:configuration>
For more options go here.
It looks like properties file configuration does not support filters. The following is taken from log4j's official wiki:
Filter is not supported by PropertiesConfigurator.
EDIT: Added console appender as well to the XML and turned off debug for log4j. Now it should go to both file and console.