logback

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:   新的公司日志管理统一用logback,由于之前一直在用log4j,所以其实对logback这个由log4j长出来的家伙还不算陌生。   首先介绍下logback的前世今生。   slf4j由log4j作者Ceki开发,逐步取代apahce commons logging。

 


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

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

 

目录
相关文章
|
2月前
|
缓存 Java 开发者
【Spring】原理:Bean的作用域与生命周期
本文将围绕 Spring Bean 的作用域与生命周期展开深度剖析,系统梳理作用域的类型与应用场景、生命周期的关键阶段与扩展点,并结合实际案例揭示其底层实现原理,为开发者提供从理论到实践的完整指导。
|
机器学习/深度学习 人工智能 算法
利用AI技术进行图像识别的探索之旅
【10月更文挑战第21天】本文主要介绍了如何运用人工智能技术进行图像识别。通过深入浅出的解释,让读者对AI图像识别有更深入的理解。同时,文章还提供了一些代码示例,帮助读者更好地理解和应用这些技术。
|
自然语言处理 索引
RAG入门:理解检索增强生成模型的基本原理
【10月更文挑战第21天】作为一名长期从事自然语言处理(NLP)研究的技术人员,我一直在关注各种新兴技术的发展趋势。其中,检索增强生成(Retrieval-Augmented Generation, RAG)模型引起了我的特别兴趣。RAG技术结合了检索系统和生成模型的优点,旨在解决传统生成模型在处理长文本理解和生成时所面临的挑战。本文将从个人的角度出发,介绍RAG的基本概念、工作原理及其相对于传统生成模型的优势,并探讨一些基本的实现方法。
781 1
|
存储 缓存 数据可视化
链路跟踪-SkyWalking系列(二)
链路跟踪-SkyWalking系列(二)
|
机器学习/深度学习 存储 编解码
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计(2)
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计
|
消息中间件 Java Kafka
你了解RabbitMQ、RocketMQ 和 Kafka吗?
【6月更文挑战第26天】比较了RabbitMQ、RocketMQ和Kafka三种消息队列:RabbitMQ灵活,支持多种协议,适合中小型应用;RocketMQ高性能,适用于大规模消息处理;Kafka则以高吞吐量和流处理见长。RabbitMQ和Kafka生态丰富,而RocketMQ运维相对复杂。选择时考虑性能、灵活性、生态系统和易用性,以及特定场景如大数据流处理或分布式系统组件通信。
420 1
|
存储 数据可视化 定位技术
【ES数据可视化】kibana实现数据大屏
【ES数据可视化】kibana实现数据大屏
536 3
|
消息中间件 前端开发 Kafka
离线数仓(二)【用户行为日志采集平台搭建】(1)
离线数仓(二)【用户行为日志采集平台搭建】
|
SQL 关系型数据库 MySQL
Maxwell - 增量数据同步工具(1)
Maxwell - 增量数据同步工具
|
存储 XML Dubbo
dubbo(2.7.3) 9.动态中心配置
dubbo(2.7.3) 9.动态中心配置