java – Log4j用不同格式记录两次

前端之家收集整理的这篇文章主要介绍了java – Log4j用不同格式记录两次前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不知道为什么log4j用不同的格式附加两次.以前有人遇到过吗?

这是我的log4j.xml文件

  1. <log4j:configuration>
  2.  
  3. <appender name="async" class="org.apache.log4j.AsyncAppender">
  4. <!-- this parameter need to be set to false to avoid application from hanging. -->
  5. <param name="Blocking" value="false" />
  6. <appender-ref ref="myAppender" />
  7. </appender>
  8.  
  9. <appender name="myAppender" class="org.apache.log4j.ConsoleAppender">
  10. <param name="Threshold" value="INFO" />
  11. <layout class="org.apache.log4j.PatternLayout">
  12. <param name="ConversionPattern" value="%-5p %d{ISO8601} [%t] %c %x - %m%n" />
  13. </layout>
  14. </appender>
  15.  
  16. <logger name="com.server">
  17. <level value="INFO" />
  18. </logger>
  19.  
  20. <logger name="org.springframework">
  21. <level value="INFO" />
  22. </logger>
  23.  
  24. <logger name="org.hibernate.LazyInitializationException" additivity="false">
  25. <level value="off" />
  26. <appender-ref ref="async" />
  27. </logger>
  28.  
  29. <logger name="net.sf.ehcache">
  30. <level value="INFO" />
  31. </logger>
  32.  
  33. <logger name="com.mchange">
  34. <level value="INFO" />
  35. </logger>
  36.  
  37. <root>
  38. <priority value="INFO" />
  39. <appender-ref ref="async" />
  40. </root>
  41.  
  42. </log4j:configuration>

这里有一些示例输出

  1. INFO 2016-08-26 11:01:38,353 [main] com.server.Server - Server started successfully...
  2. 11:01:38,353 INFO : Server started successfully...

编辑:当我将“myAppender”appender阈值更改为“ERROR”时,显示的第二个日志消息(从时间开始,而不是“INFO”)仍在生成.有没有一些我需要禁用的默认记录器?似乎有些东西仍然记录这些“INFO”级别的消息,即使指定的appender是用于“ERROR”级消息.另外,如果我注释掉整个log4j.xml文件,第二个日志消息(和所有喜欢的)仍然被记录.我该如何防止这种情况?谢谢!

解决方法

我不熟悉log4j的XML语法(我使用log4j.properties进行配置),所以这里是我的2美分,以帮助您调试和修复代码.

首先尝试使用下面的根记录器配置而不是你的< appender-ref ref =“async”/> –

  1. <logger name="org.hibernate.LazyInitializationException" additivity="false">
  2. <level value="off" />
  3. <appender-ref ref="myAppender" />
  4. </logger>
  5. ..............
  6. ...........
  7. <root>
  8. <priority value="INFO" />
  9. <appender-ref ref="myAppender" />
  10. </root>

如果以上方法不起作用,则尝试将< param name =“Threshold”value =“ERROR”/>无论是在async和myAppender,我猜没有服务器启动成功日志将被打印(我想你已经尝试与myAppender)

如果这有帮助,那么这意味着您尝试引用/继承记录器的方式不正常或正确使用,所以您从该方向思考并纠正问题,您需要阅读有关appender-ref元素和AsyncAppender记录器的更多信息.

无论以上是否有效,我猜你试图实现以下目标 –

>打印您的标准输入/输出,即您的终端窗口
>打印文件以及prod环境

我将在log4j.properties中执行以下操作:

  1. log4j.logger.com.sks.cs50=DEBUG,CS50GlobalFileAppender,stdout
  2.  
  3. #####CS50 Web log##########
  4. log4j.appender.CS50GlobalFileAppender=org.apache.log4j.RollingFileAppender
  5. log4j.appender.CS50GlobalFileAppender.File=${logDir}cs50.log
  6. log4j.appender.CS50GlobalFileAppender.MaxBackupIndex=50
  7. log4j.appender.CS50GlobalFileAppender.Threshold=DEBUG
  8. log4j.appender.CS50GlobalFileAppender.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.CS50GlobalFileAppender.layout.ConversionPattern=%C %d [%t] [%X{randomNumber}] %-5p - %m%n
  10. log4j.appender.CS50GlobalFileAppender.MaxFileSize=500000KB
  11.  
  12. # Log format to standard output
  13. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  14. log4j.appender.stdout.target=System.out
  15. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  16. log4j.appender.stdout.layout.ConversionPattern=%d [%X{randomNumber}] %-5p - %m%n
  17.  
  18. log4j.logger.org.apache = INFO
  19. log4j.logger.com.sun = INFO
  20. log4j.logger.sun = INFO
  21. log4j.logger.javax.xml.bind = INFO
  22. log4j.logger.org.springframework = INFO
  23. log4j.logger.com.cgi = DEBUG

所以,我想你可以做一些如下的事情.

  1. <log4j:configuration>
  2.  
  3. <appender name="async" class="org.apache.log4j.AsyncAppender">
  4. <!-- this parameter need to be set to false to avoid application from hanging. -->
  5. <param name="Blocking" value="false" />
  6. <layout class="org.apache.log4j.PatternLayout">
  7. <param name="ConversionPattern" value="%-5p %d{ISO8601} [%t] %c %x - %m%n" />
  8. </layout>
  9. </appender>
  10.  
  11. <appender name="myAppender" class="org.apache.log4j.ConsoleAppender">
  12. <param name="Threshold" value="INFO" />
  13. <layout class="org.apache.log4j.PatternLayout">
  14. <param name="ConversionPattern" value="%-5p %d{ISO8601} [%t] %c %x - %m%n" />
  15. </layout>
  16. </appender>
  17.  
  18. <logger name="com.server">
  19. <level value="INFO" />
  20. </logger>
  21.  
  22. <logger name="org.springframework">
  23. <level value="INFO" />
  24. </logger>
  25.  
  26. <logger name="org.hibernate.LazyInitializationException" additivity="false">
  27. <level value="off" />
  28. <appender-ref ref="async" />
  29. </logger>
  30.  
  31. <logger name="net.sf.ehcache">
  32. <level value="INFO" />
  33. </logger>
  34.  
  35. <logger name="com.mchange">
  36. <level value="INFO" />
  37. </logger>
  38.  
  39. <root>
  40. <priority value="INFO" />
  41. <appender-ref ref="async" />
  42. <appender-ref ref="myAppender" />
  43. </root>
  44.  
  45. </log4j:configuration>

请注意,以上XML配置是假定org.apache.log4j.AsyncAppender打印在某些日志文件中,但如果没有(我猜测它不是),那么上面的方法将不起作用(您仍然可以使用以上XML配置来实现文件控制台日志记录,如果您使用org.apache.log4j.RollingFileAppender替换AsyncAppender),并且我想知道为什么只能不能直接使用org.apache.log4j.AsyncAppender,因为它已经打印到控制台,所以可能只是使用:

  1. <appender name="async" class="org.apache.log4j.AsyncAppender">
  2. <!-- this parameter need to be set to false to avoid application from hanging. -->
  3. <param name="Blocking" value="false" />
  4. <layout class="org.apache.log4j.PatternLayout">
  5. <param name="ConversionPattern" value="%-5p %d{ISO8601} [%t] %c %x - %m%n" />
  6. </layout>
  7. </appender>

猜你在找的Java相关文章