2013-07-02 44 views
22

我希望做两件事情:log4j2 xml配置 - 记录到文件和控制台(不同级别)

  1. 登录具有一定级别的LOG安慰
  2. 日志与其他日志级别到文件

控制台日志记录似乎工作得很好,但日志文件保持为空。

这是我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> 

可能是什么问题?

回答

39

我想通了!在这种情况下不应该使用<Logger>标签,有关详细信息,请参阅Gaurang Patel的答案。

<?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> 
+5

所以这是什么问题?在没有解释的情况下发布解决方案并不会帮助 –

+2

我在我发布的答案中添加了解释。 –

5

<logger name="filelogger" level="error" >
这应该是问题所在。记录器的名称通常是您的软件包名称(除非您已专门命名为filelogger)。
尝试<logger name="com.yourpackage" level="error" additivity="true">

参考Log4j2 Doc

+0

感谢。它为文件日志记录工作,但现在控制台输出消失。那里有什么不对? – daker

+0

编辑我的答案添加'additivity =“真”' – basiljames

+0

加法是默认true true log4j2 –

11

虽然Daker已经把修正的配置文件,但他没有解释它。我想在这里添加解释。如Log4j2文档here中所引用的,对于给定要求,不需要使用<记录器>标签。进一步当你应该使用<记录器>标签?请阅读下面的说明文档,

也许希望消除除了com.foo.Bar之外的所有TRACE输出 。只需更改日志级别就不会完成任务 。取而代之的是,该解决方案是一个新的记录器 定义添加到配置:

<Loggers> 
    <Logger name="com.foo.Bar" level="TRACE"/> 
    <Root level="ERROR"> 
    <AppenderRef ref="STDOUT"> 
    </Root> 
    ... 
</Loggers> 
相关问题