logback spring

本文介绍了Logback的日志管理配置方法,包括如何通过过滤器实现日志的精确分类及存储,利用滚动策略进行文件管理,并通过JMSQueueAppender实现日志消息的远程发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新的公司日志管理统一用logback,由于之前一直在用log4j,所以其实对logback这个由log4j长出来的家伙还不算陌生。


首先介绍下logback的前世今生。


slf4j由log4j作者Ceki开发,逐步取代apahce commons logging。

logback由log4j作者Ceki开发,逐步取代log4j。

slf4j等于commons-logging,是各种日志实现的通用入口,会根据classpath中存在下面哪一个Jar来决定具体的日志实现库。

logback相比较log4j的优势

slf4j支持参数化的logger.error("帐号ID:{}不存在", userId);

告别了if(logger.isDebugEnable()) 时代。

另外logback的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j。

slf4j和logback的使用

1.如果日志的参数超过3个,需要写成

Java代码 收藏代码
  1. Object[]params={newVal,below,above};
  2. logger.debug("Value{}wasinsertedbetween{}and{}.",params);

2.因为内部已优化,作者认为slf4j的logger不需要定义为static。

3.可设置缓存后批量写日志文件(但服务器如果重启,可能会丢失未写到磁盘的记录)

4.MDC,用Filter,将当前用户名等业务信息放入MDC中,在日志format定义中即可使用该变量。

5.JMS Appender用于告警, DB Appender用于业务日志等可以使用插件,如生成Log代码的Eclipse插件Log4E。

6.tomcat和glassfish中,设定日志路径为../logs/xxxx.log 都能将日志放入应用服务器本身的logs目录

最后把最近完善的一个logback.xml贴上,毕竟实际项目中的文件最能说明问题。

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <configuration>
  3. <substitutionPropertyname="log.base"value="d:\\logback\\logback"/>
  4. <jmxConfigurator/>
  5. <appendername="stdout"class="ch.qos.logback.core.ConsoleAppender">
  6. <filterclass="ch.qos.logback.core.filter.EvaluatorFilter">
  7. <evaluatorname="myEval">
  8. <expression>message.contains("dao")</expression>
  9. </evaluator>
  10. <onMatch>ACCEPT</onMatch>
  11. <onMismatch>DENY</onMismatch>
  12. </filter>
  13. <layoutclass="ch.qos.logback.classic.PatternLayout">
  14. <pattern>%date[%thread]%-5level%logger{80}-%msg%n</pattern>
  15. </layout>
  16. </appender>
  17. <appendername="logfile-dao"
  18. class="ch.qos.logback.core.rolling.RollingFileAppender">
  19. <filterclass="ch.qos.logback.core.filter.EvaluatorFilter">
  20. <evaluatorname="myEval_dao">
  21. <expression>message.contains("dao")</expression>
  22. </evaluator>
  23. <onMatch>ACCEPT</onMatch>
  24. <onMismatch>DENY</onMismatch>
  25. </filter>
  26. <Encoding>UTF-8</Encoding>
  27. <File>${log.base}_dao.log</File>
  28. <rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  29. <FileNamePattern>${log.base}.%d{yyyy-MM-dd}_dao.log.zip
  30. </FileNamePattern>
  31. </rollingPolicy>
  32. <layoutclass="ch.qos.logback.classic.PatternLayout">
  33. <pattern>%date[%thread]%-5level%logger{80}-%msg%n</pattern>
  34. </layout>
  35. </appender>
  36. <appendername="logfile-service"
  37. class="ch.qos.logback.core.rolling.RollingFileAppender">
  38. <filterclass="ch.qos.logback.core.filter.EvaluatorFilter">
  39. <evaluatorname="myEval_service">
  40. <expression>message.contains("service.impl")</expression>
  41. </evaluator>
  42. <onMatch>ACCEPT</onMatch>
  43. <onMismatch>DENY</onMismatch>
  44. </filter>
  45. <Encoding>UTF-8</Encoding>
  46. <File>${log.base}_service.log</File>
  47. <rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  48. <FileNamePattern>${log.base}.%d{yyyy-MM-dd}_service.log.zip
  49. </FileNamePattern>
  50. </rollingPolicy>
  51. <layoutclass="ch.qos.logback.classic.PatternLayout">
  52. <pattern>%date[%thread]%-5level%logger{80}-%msg%n</pattern>
  53. </layout>
  54. </appender>
  55. <appendername="jms_dao"class="ch.qos.logback.classic.net.JMSQueueAppender">
  56. <InitialContextFactoryName>
  57. org.apache.activemq.jndi.ActiveMQInitialContextFactory
  58. </InitialContextFactoryName>
  59. <ProviderURL>tcp://192.168.1.120:61616</ProviderURL>
  60. <filterclass="ch.qos.logback.core.filter.EvaluatorFilter">
  61. <evaluatorname="myEval_service">
  62. <expression>message.contains("dao")</expression>
  63. </evaluator>
  64. <onMatch>ACCEPT</onMatch>
  65. <onMismatch>DENY</onMismatch>
  66. </filter>
  67. <QueueConnectionFactoryBindingName>ConnectionFactory
  68. </QueueConnectionFactoryBindingName>
  69. <QueueBindingName>cms_dao_log</QueueBindingName>
  70. </appender>
  71. <appendername="jms_service"class="ch.qos.logback.classic.net.JMSQueueAppender">
  72. <InitialContextFactoryName>
  73. org.apache.activemq.jndi.ActiveMQInitialContextFactory
  74. </InitialContextFactoryName>
  75. <ProviderURL>tcp://192.168.1.120:61616</ProviderURL>
  76. <filterclass="ch.qos.logback.core.filter.EvaluatorFilter">
  77. <evaluatorname="myEval_service">
  78. <expression>message.contains("service.impl")</expression>
  79. </evaluator>
  80. <onMatch>ACCEPT</onMatch>
  81. <onMismatch>DENY</onMismatch>
  82. </filter>
  83. <QueueConnectionFactoryBindingName>ConnectionFactory
  84. </QueueConnectionFactoryBindingName>
  85. <QueueBindingName>cms_service_log</QueueBindingName>
  86. </appender>
  87. <loggername="com.cms5.cmsservice.jms">
  88. <levelvalue="DEBUG"/>
  89. </logger>
  90. <loggername="java.sql.PreparedStatement">
  91. <levelvalue="DEBUG"/>
  92. </logger>
  93. <loggername="java.sql.Connection">
  94. <levelvalue="DEBUG"/>
  95. </logger>
  96. <loggername="java.sql.Statement">
  97. <levelvalue="DEBUG"/>
  98. </logger>
  99. <loggername="com.ibatis">
  100. <levelvalue="DEBUG"/>
  101. </logger>
  102. <loggername="com.ibatis.common.jdbc.SimpleDataSource">
  103. <levelvalue="DEBUG"/>
  104. </logger>
  105. <loggername="com.ibatis.common.jdbc.ScriptRunner">
  106. <levelvalue="DEBUG"/>
  107. </logger>
  108. <loggername="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate">
  109. <levelvalue="DEBUG"/>
  110. </logger>
  111. <loggername="com.danga.MemCached">
  112. <levelvalue="INFO"/>
  113. </logger>
  114. <loggername="org.springframework.test">
  115. <levelvalue="DEBUG"/>
  116. </logger>
  117. <loggername="org.apache.struts2">
  118. <levelvalue="DEBUG"/>
  119. </logger>
  120. <root>
  121. <levelvalue="INFO"/>
  122. <!--<appender-refref="stdout"/>
  123. -->
  124. <appender-refref="logfile-dao"/>
  125. <appender-refref="logfile-service"/>
  126. <appender-refref="jms_dao"/>
  127. <appender-refref="jms_service"/>
  128. </root>
  129. </configuration>

就先不做说明了,里面的配置还是比较明确的,关于jmsappender那部分,之前也做过简单说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值