前言:
使用logback 来记录日志真是一个不错的选择,正像logback官网上介绍的那样:
logback扩展了log4j很多功能,以前一直不明白logback好在哪儿,因为log4j完全够用了,为啥还要用logback来写日志呢? 直到有一天用log4j来记录日志被一个问题所难住了。
问题1:
需要以天为单位记录日志,每天生成一个日志文件,比如xxx.log.yyyy-mm-dd,很自然就想到log4j的appender类 DailyRollingFileAppender,但是发现一个问题,使用这个appender没有办法设置MaxFileSize 这个值,不能控制最大文件数,时间一长服务端的磁盘就被历史日志给撑爆了,所以只能在服务端启动一个定时脚本定时去清理历史文件,或者,要自己写代码去扩展DailyRollingFileAppender的行为,加入自动清理历史日志的功能。但是经过实践都不是最佳解决方案,不是说不能实现,只是实现过程有很多细节需要处理。
问题2:
因为系统是一个SAAS系统,所以系统记录日志希望按照有系统用户来区分,即一个用户一个日志文件,行为日志都记录在各自的日志文件中。如果第一个问题还能通过某种方式是适配实现的话,那这个需求用log4j基本没有可能实现了,或者实现起来要很费周折了。
新的发现:
偶然间在百度上发现,使用logback的siftingappender 可以轻松解决以上第二个问题。http://bbs.csdn.net/topics/390401271?page=1 。
在执行的上下文开始地方设置线程绑定参数,例如:MDC.put("app", onsListener.getCollectionName());
配置logback.xml 放置在classpath的根目录上,配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoding>${loggingCharset}</encoding> <!-- <filter class="com.alibaba.citrus.logconfig.logback.LevelRangeFilter"> <levelMax>INFO</levelMax> </filter> --> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern><![CDATA[%d{yyyy-MM-dd HH:mm:ss} %level %X{app} %logger{35}- %msg%n]]></pattern> </layout> </appender> <appender name="statis" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <Key>app</Key> <DefaultValue>unknown</DefaultValue> </discriminator> <sift> <appender name="FILE-${app}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>${log.dir}/incr/incr-${app}.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.dir}/incr/%d{yyyy-MM-dd}-incr-${app}.log </fileNamePattern> <maxHistory>8</maxHistory> </rollingPolicy> <encoder> <pattern><![CDATA[%d{yyyy-MM-dd HH:mm:ss} %level %logger{35}- %msg%n]]></pattern> </encoder> </appender> </sift> </appender> <logger name="com.dfire.tis.realtime.transfer"> <level value="INFO" /> <appender-ref ref="statis" /> </logger> <root> <level value="ERROR" /> <appender-ref ref="STDOUT" /> </root> </configuration>
- 通过SiftingAppender来实现不同用户的日志通过线程绑定变量$app来实现文件隔离,并且可通过系统环境变量的方式灵活设置日志文件的名称。
- 通过设置TimeBasedRollingPolicy来实现按天来滚动添加日志文件,设置maxHistory属性来设置最大保留日志文件个数,看系统磁盘,和每天打印日志大小来判断保留的日志文件个数。
maven依赖:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version> </dependency>
相关推荐
扩展logback将日志输出到Kafka实例源码,详情请参见博文:http://blog.csdn.net/l1028386804/article/details/79135948
文章链接:https://blog.csdn.net/sutongxuevip/article/details/80595431,如若没有足够积分可留下邮箱或者私信,有问题可在文章底部一起讨论
logback做日志(代码演示和文档),logback做日志(代码演示和文档)
springboot+logback输出日志文件1
springboot项目,使用logback保存日志到数据库,非自增主键id,insert使用的是UUID
Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志。这篇文章主要介绍了SpringBoot+Logback实现一个简单的链路追踪功能,需要的朋友可以参考下
这是logback日志输出需要的jar包,以及最基础的logback.xml配置
使用slf4j配置kafkaAppender写入日志到kafka列队 支持日志解析+过滤等扩展接口
在日常工程开发中,日志是非常重要的一部分,通过日志可以迅速定位线上问题,日志框架也有很多选择,日志框架Logback和Log4j是同一个作者,Logback相比于Log4j,性能提高了10倍以上的性能,占用的内存也变小了,并且...
本篇文章主要介绍了Spring Boot 使用slf4j+logback记录日志配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
logback日志的jar包和配置介绍:logback-classic-1.1.2.jar、logback-core-1.1.2.jar、slf4j-api-1.7.7.jar、logback.xml、rsframework.properties
logback日志写logstash配置appender参考
关闭HttpClient日志的logback文件
适用于java中的Logback日志框架
扩展logback将日志输出到Kafka实例扩展源码,详情参见博文:http://blog.csdn.net/l1028386804/article/details/79136841
内置三个jar包 一个配置文件 logback.txt logback-classic-1.2.3.jar logback-core-1.2.3.jar slf4j-api-1.7.26.jar
Logback 异常日志减少打印内容
Logback日志应用.mp4
这个代码实现了一个简单的应用程序,并使用了Logback日志框架来记录程序的运行日志。首先,我们通过调用LoggerFactory.getLogger()方法创建了一个Logger对象,用于记录应用程序的日志信息。然后,在主函数中,我们...
几乎是网上 能找到的 日志脱敏的所有实现 1、基于正则表达式的 日志脱敏实现 ,扩展logback 、log4j 2、springmvc 返回报文脱敏。 3、基于注解方式的脱敏。 大家选择使用。