`
mozhenghua
  • 浏览: 324489 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

logback记日志真的很好使

阅读更多

前言:    

   使用logback 来记录日志真是一个不错的选择,正像logback官网上介绍的那样:

写道
Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.

     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>
    
     该依赖中,slf4j-api logger门面一起传递依赖进来了,理论上在项目不就不需要依赖其他和log相关的第三方包了,除非项目中是用 apache commons-logging 来记录日志的,那还要在依赖一个jcl-over-slf4j的桥接依赖包。

 

另外需要将classpath中的log4j.xml 或者log4j.properties配置文件删除。

 

 总结: 

     接触logback之后有一种得来全部费工夫的感觉,之前一直试图通过log4j来实现实现而没有实现的需求,在logback中已经完美支持了,都怪我之前只顾低头走老路,没有抬头环顾一下周围是否还有什么其他的方式来实现,或者也没有和其他同事讨论一下是否有更好的解决方案,只顾一个人埋头搞自己的一亩三分田,这个对一个程序员来说是很要命的。现在的社会是讲究合作和效率的,发现和理解一个新事物的本质和特性对一个程序员也是一下必备的技能。

  从此,我们可以快乐地向世界大声喊出“hello logback”,log4j的时代过去了,bye bye log4j

 

 

 

分享到:
评论

相关推荐

    Logback+Slf4j,基于SpringBoot实现日志脱敏.zip

    Logback是Ch.qos.logback项目的一个组件,它具有高效、灵活且功能丰富的特点,能够很好地支持日志脱敏的需求。 实现日志脱敏的关键在于自定义日志拦截器。在SpringBoot中,我们可以创建一个实现了`AppenderFilter`...

    springmvc log4j2 logback 注解 jackson 日志脱敏实现源码

    这个实现可能扩展了`Logback`和`Log4j`,让它们在记录日志时自动执行脱敏操作。`Logback`和`Log4j`都是广泛使用的日志框架,它们允许自定义日志格式和处理策略。 2. **SpringMVC返回报文脱敏**:`SpringMVC`是...

    logback日志文件

    Logback可以很好地与Spring Boot、Spring Framework等常见Java框架集成。在Spring Boot中,只需简单地引入依赖,logback就会自动配置并开始工作。 **总结** Logback作为一款强大的日志框架,为Java开发者提供了...

    logback

    **标题:“logback”** **描述:** 在IT领域,logback是一个广泛使用的日志记录框架,...通过深入阅读并实践手册中的内容,开发者可以充分利用logback的强大功能,优化日志管理,从而更好地理解和诊断应用程序的行为。

    Logback所需的jar包

    logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。() logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能。...

    Slf4j+logback实现logback测试

    Logback是Slf4j的推荐后端实现,因为它们之间有很好的集成,可以提供高效且功能丰富的日志解决方案。 **Slf4j与Logback集成** 1. **引入依赖**: 在项目中,首先需要添加Slf4j和Logback的依赖。在Maven项目中,可以...

    logback+web项目Demo

    这个Demo是一个很好的学习资源,可以帮助你深入理解Logback如何与Web项目结合,以及如何通过配置文件定制日志行为。对于Java开发者来说,熟练掌握日志框架是非常重要的技能,因为它对于问题排查和系统监控至关重要。

    Logback 使用手册

    使用Logback的好处在于其提供了强大的日志记录功能的同时,还保证了很高的性能。其性能相较于Log4j有了明显的提升,这对于开发高性能的Java应用程序来说是非常重要的。Logback的灵活性和易用性使得它在日志库选择中...

    log4j logback slf4j

    此外,Logback引入了更多特性,如异步日志记录、MDC(Mapped Diagnostic Context)用于追踪请求,以及丰富的配置选项。 **Log4j、Logback和SLF4J的关系** SLF4J作为抽象层,提供了一组API供开发者调用,而Log4j和...

    logback-demo.zip

    总的来说,"logback-demo.zip" 提供了一个基于 Logback 的日志管理实践案例,展示了如何通过配置文件实现日志的标准化输出,这对于理解和优化日志系统具有很高的参考价值。通过对 "kg-api" 的学习,开发者可以更好地...

    基于切面的日志记录SSMdemo

    总结来说,“基于切面的日志记录SSMdemo”是一个很好的学习案例,它展示了如何利用Spring的AOP特性在SSM框架中实现优雅的日志管理。通过这种方式,开发者可以专注于业务逻辑,而日志记录这一跨切面的需求则由AOP自动...

    记录日志启用有限的线程进行记录相关内容

    "记录日志启用有限的线程进行记录相关内容"这一主题,主要涉及如何高效且有序地利用线程进行日志记录。 日志线程通常是指在应用程序中专门用于处理日志写入操作的线程或线程池。这种设计的目的在于避免主线程或其他...

    Spring Boot整合logback一个简单的日志集成架构

    因此,需要更强大、灵活的日志解决方案——logback,它不仅支持日志的分时分类管理,而且与Spring Boot有很好的集成,同时实现了SLF4J(Simple Logging Facade for Java)接口,是log4j的后继产品,提供了更加丰富的...

    日志记录文件及压缩上传服务器

    日志框架如Log4j、Logback或Java内置的java.util.logging可以帮助开发者便捷地实现日志记录。 2. 日志文件压缩: 日志文件可能随着系统运行时间增长变得非常大,为了节省存储空间,通常会定期对日志文件进行压缩。...

    ssm框架结合不同日志

    在SSM框架的各个组件中,通过导入相应的日志API(如Log4j的`import org.apache.log4j.Logger`,或者Logback的`import ch.qos.logback.classic.Logger`),并实例化Logger对象,就可以在代码中记录日志。 4. 使用...

    在logback.xml中自定义动态属性的方法

    Logback不仅提供了全面的日志记录功能,而且还能很好地与SLF4J(Simple Logging Facade for Java)集成。它在应用中扮演着重要的角色,用于记录系统运行时的信息、警告、错误等。在Web应用中,我们经常利用logback....

    logback-http-appender

    `logback-http-appender`支持多种HTTP客户端库,如OkHttp和Apache HttpClient,这使得它具有很好的兼容性和性能。同时,由于它是基于标准的HTTP协议,因此可以轻松地与各种日志收集系统集成。 值得注意的是,使用`...

    日志记录,开源项目使用方法见说明.zip

    压缩包内的“日志记录,开源项目使用方法见说明”很可能是详细的教程文档或者示例代码,涵盖了如何集成和配置这些日志库,以及如何根据项目需求定制日志记录。这将包括如何设置日志级别,如何自定义日志格式,如何...

    Helloworld.zip

    对于初学者来说,这是一个很好的起点,可以学习 Maven 的项目结构、依赖管理和构建流程,以及 Logback 如何处理应用程序的日志输出。通过分析和运行这个项目,新手可以了解如何设置和使用这两个工具,为进一步深入...

    日志记录(log4j)

    随着Java生态系统的发展,出现了其他日志框架,如Logback(由Log4j的创始人创建)和SLF4J(Simple Logging Facade for Java),它们提供了更现代的特性和更好的性能。 总之,Log4j作为一款强大的日志工具,对于...

Global site tag (gtag.js) - Google Analytics