logback的使用方法

logback的介绍

Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块:

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

logback的优势

  1. 更快的实现:Logback的内核重写了,在一些关键执行路径上性能提升10倍以 上。而且logback不仅性能提升了,初始化内存加载也更小了。
  2. 非常充分的测试:Logback经过了几年,数不清小时的测试。Logback的测试完全不同级别的。
  3. Logback-classic非常自然实现了SLF4j:Logback-classic实现了SLF4j。在使用SLF4j中,你都感觉不到logback-classic。而且因为logback-classic非常自然地实现了slf4j , 所 以切换到log4j或者其他,非常容易,只需要提供成另一个jar包就OK,根本不需要去动那些通过SLF4JAPI实现的代码。
  4. 非常充分的文档 官方网站有两百多页的文档。
  5. 自动重新加载配置文件,当配置文件修改了,Logback-classic能自动重新加载配置文件。扫描过程快且安全,它并不需要另外创建一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JEE环境里面。
  6. Lilith是log事件的观察者,和log4j的chainsaw类似。而lilith还能处理大数量的log数据 。
  7. 谨慎的模式和非常友好的恢复,在谨慎模式下,多个FileAppender实例跑在多个JVM下,能 够安全地写道同一个日志文件。RollingFileAppender会有些限制。Logback的FileAppender和它的子类包括 RollingFileAppender能够非常友好地从I/O异常中恢复。
  8. 配置文件可以处理不同的情况,开发人员经常需要判断不同的Logback配置文件在不同的环境下(开发,测试,生产)。而这些配置文件仅仅只有一些很小的不同,可以通过,和来实现,这样一个配置文件就可以适应多个环境。
  9. Filters(过滤器)有些时候,需要诊断一个问题,需要打出日志。在log4j,只有降低日志级别,不过这样会打出大量的日志,会影响应用性能。在Logback,你可以继续 保持那个日志级别而除掉某种特殊情况,如alice这个用户登录,她的日志将打在DEBUG级别而其他用户可以继续打在WARN级别。要实现这个功能只需加4行XML配置。可以参考MDCFIlter 。
  10. SiftingAppender(一个非常多功能的Appender):它可以用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender能够区别日志事件跟进用户的Session,然后每个用户会有一个日志文件。
  11. 自动压缩已经打出来的log:RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响。
  12. 堆栈树带有包版本:Logback在打出堆栈树日志时,会带上包的数据。
  13. 自动去除旧的日志文件:通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory 12,那那些log文件超过12个月的都会被自动移除。

需要使用的包

  	<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <!--用于桥接commons-logging 到 slf4j-->
		<dependency> 
   	 		<groupId>org.slf4j</groupId> 
    		<artifactId>jcl-over-slf4j</artifactId> 
    		<version>1.6.2</version> 
		</dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.7</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
        </dependency>

用到的配置文件

logback在加载配置文件的时候是按照一定的顺序寻找配置文件

1.Logback tries to find a file called logback.groovy in the classpath.
2.If no such file is found, logback tries to find a file called logback-test.xml in the classpath.
3.If no such file is found, it checks for the file logback.xml in the classpath…
4.If neither file is found, logback configures itself automatically using the BasicConfigurator which will cause logging output to be directed to the console.

下面是logback.xml的模板以及参数说明

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <!-- 日志保存路径,可以是绝对路径,也可以是相对路径,
   logback会自动创建文件夹,这样设置了就可以输出日志文件了  -->
   <substitutionProperty name="logbase" value="logs/"/>
   <!-- 这个是要配置输出文件的 -->
   <!-- ConsoleAppender 控制台输出日志 -->
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       <!-- 对日志进行格式化 -->
       <encoder>
           <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
       </encoder>
   </appender>
   <!-- ERROR级别日志 -->
   <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
   <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <!-- 过滤器,只记录WARN级别的日志 -->
       <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
           <level>ERROR</level>
       </filter>
       <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
       <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
           <!--日志输出位置  可相对、和绝对路径 -->
           <fileNamePattern>${logbase}%d{yyyy-MM-dd}/error%i.log</fileNamePattern>
            <!--日志最多保留30天,单个文件最大20mb,该类型日志文件一共不能超过400mb-->
           <MaxHistory>30</MaxHistory>
           <maxFileSize>20MB</maxFileSize>
           <totalSizeCap>400MB</totalSizeCap>
       </rollingPolicy>
       <encoder>
           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
       </encoder>
   </appender>

   <!-- INFO级别日志 appender -->
   <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <!-- 过滤器,只记录INFO级别的日志 -->
       <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
           <level>INFO</level>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
           <!-- 按天回滚 daily -->
           <fileNamePattern>${logbase}%d{yyyy-MM-dd}/info%i.log</fileNamePattern>
           <MaxHistory>30</MaxHistory>
           <maxFileSize>20MB</maxFileSize>
           <totalSizeCap>400MB</totalSizeCap>
       </rollingPolicy>
       <encoder>
           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
       </encoder>
   </appender>


   <!-- DEBUG级别日志 appender -->
   <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <!-- 过滤器,只记录DEBUG级别的日志 -->
       <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
           <level>DEBUG</level>
       </filter>
       <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
           <!-- 按天回滚 daily -->
           <fileNamePattern>${logbase}%d{yyyy-MM-dd}/debug%i.log</fileNamePattern>
           <MaxHistory>30</MaxHistory>
           <maxFileSize>20MB</maxFileSize>
           <totalSizeCap>400MB</totalSizeCap>
       </rollingPolicy>
       <encoder>
           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
       </encoder>
   </appender>

   <!-- root级别  info将会屏蔽debug级别的日志 -->
   <root level="info">
       <!-- 控制台输出 -->
       <appender-ref ref="STDOUT"/>
       <!-- 文件输出 -->
       <appender-ref ref="ERROR"/>
       <appender-ref ref="INFO"/>
       <appender-ref ref="DEBUG"/>
   </root>
</configuration>

使用方法

Logger logger = LoggerFactory.getLogger(xxx.class);
logger.info("xxx");
//或者使用lombok注解方式
@Slf4j
log.info("xxx");
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值