logback日志框架技术

logback日志框架技术

Logback主要分为三个模块:

  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能1

1. 入门

  1. 导入依赖

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    
  2. logback配置,logback会依次读取以下类型配置文件:

    • logback.groovy
    • logback-test.xml
    • logback.xml 如果均不存在会采用默认配置
  3. logback组件之间的关系

    • Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
    • Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
    • Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封装在encoder中。

2.Appender配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--配置集中管理属性-->
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
    <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %-5level %msg%n"/>
    <!-- 日志文件存放目录
        value="/logs" : 绝对路径
        value="logs" : 项目根路径
    -->
    <property name="log_dir" value="logs"></property>

    <!--控制台日志输出appender-->
    <!--
        Appender: 设置日志信息的去向,常用的有以下几个
            ch.qos.logback.core.ConsoleAppender (控制台)
            ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺 寸的时候产生一个新文件)
            ch.qos.logback.core.FileAppender (文件)
    -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err-->
        <target>System.err</target>
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>


    <!--fileappender-->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!--日志输出路径-->
        <file>${log_dir}/logback.log</file>
    </appender>

    <!-- 生成html格式appender对象 -->
    <appender name="htmlfile" class="ch.qos.logback.core.FileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%level%d{yyyy-MM-dd HH:mm:ss}%c%M%L%thread%m</pattern>
<!--                <pattern>${pattern}</pattern>-->
            </layout>
            <!--日志输出路径-->
            <file>${log_dir}/logback.html</file>
        </encoder>
    </appender>


    <!-- 日志文件拆分和归档的appender对象-->
    <appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!--日志输出路径-->
        <file>${log_dir}/roll_logback.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--按照时间拆分,通过指定压缩文件名称,来确定分割文件方式-->
<!--            <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd-HH-mm-ss}.log%i.gz</fileNamePattern>-->
            <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i</fileNamePattern>
            <!--按照文件大小拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy  
     
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--设置拦截日志级别-->
            <level>info</level> <!--error级别输出-->
            <onMatch>ACCEPT</onMatch><!--超过这个级别就放行-->
            <onMismatch>DENY</onMismatch><!--小于这个级别就拦截-->
        </filter>
        
         <!--异步日志--><!--通常情况下,必须等日志处理完,主线程才会继续向下执行,所以使用异步日志--->
        <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
            <appender-ref ref="rollFile"/>
        </appender>
    </appender>
    
    


    <!--日志记录器对象-->
    <!--
        用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
        <loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性
        name:
            用来指定受此logger约束的某一个包或者具体的某一个类。
        level:
            用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,如果未设置此属性,那么当前logger将会继承上级的级别。
        additivity:
            是否向上级loger传递打印信息。默认是true。
        <logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个 logger
    -->
    <!--
        也是<logger>元素,但是它是根logger。默认debug
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
        <root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个 logger。
    -->
    <root level="ALL">
        <appender-ref ref="console"/>
<!--        <appender-ref ref="file"/>-->
<!--        <appender-ref ref="htmlfile"/>-->
        <appender-ref ref="async"/>
    </root>
</configuration>

3.logback-access的使用

​ logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。我们可以使用logback-access模块来替换tomcat的访问日志。步骤如下:

  1. 将logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下

  2. 修改$TOMCAT_HOME/conf/server.xml中的Host元素中添加

    <Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
    
  3. Logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!-- always a good activate OnConsoleStatusListener -->
        <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
        <property name="LOG_DIR" value="${catalina.base}/logs"/>
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_DIR}/access.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            </rollingPolicy>
    
            <encoder> 
            	<!-- 访问日志的格式 -->
                <pattern>combined</pattern>
            </encoder>
        </appender>
        <appender-ref ref="FILE"/>
    </configuration>
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值