• Logback


    Logback

    Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好。

    官方网站:https://logback.qos.ch/index.html

    Logback主要分为三个模块:

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

    案例演示

    添加pom.xml文件

    <dependency>
      <groupId>org.slf4jgroupId>
      <artifactId>slf4j-apiartifactId>
      <version>1.7.25version>
    dependency>
    <dependency>
      <groupId>ch.qos.logbackgroupId>
      <artifactId>logback-classicartifactId>
      <version>1.2.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    添加测试类

    public class LogbackService {
    
        //定义日志对象
        public final static Logger LOGGER = LoggerFactory.getLogger(LogbackService.class);
        @Test
        public void testSlf4j(){ //打印日志信息
            LOGGER.error("error");
            LOGGER.warn("warn");
            LOGGER.info("info");
            LOGGER.debug("debug");
            LOGGER.trace("trace");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    logback配置

    logback会依次读取以下类型配置文件:

    • logback.groovy
    • logback-test.xml
    • logback.xml 如果均不存在会采用默认配置

    logback组件之间的关系

    1. Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也 可以定义日志类型、级别。

    2. Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。

    3. Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封装在encoder中

    基本配置信息
    
    <configuration>
        
        <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>
    
        
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
          
            <target>System.errtarget>
          
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}pattern>
            encoder>
        appender>
        
        <root level="ALL">
            <appender-ref ref="console"/>
        root>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    pattern

    ch.qos.logback.classic.PatternLayout中可以看到相关的字符替代,如:

    • %level:日志的级别
    • %d:日期
      • $d{yyyy-MM-dd HH:mm:ss.SSS}
    • %m:方法名
    • %L:行号
    • %thread:线程名
    • %msg:信息
    • %n:换行
    • %logger{length}:logger名,length可以缩短logger名
    • %C{length}:全限定类名,length可以缩短class名

    格式修饰符

    • 左对齐:-+最小宽度,用十进制表示
      • 如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。如果字符大于最小宽度,字符永远不会被截断。
    • 最大宽度:.+最大宽度,十进制表示
      • 如果字符大于最大宽度,则从前面截断。点符号.后面加减号-在加数字,表示从尾部截断。
    Format modifierLogger nameResult
    [%20.20logger]main.Name[ main.Name]
    [%-20.20logger]main.Name[main.Name ]
    [%10.10logger]main.foo.foo.bar.Name[o.bar.Name]
    [%10.-10logger]main.foo.foo.bar.Name[main.foo.f]

    Appender

    Appender:设置日志信息的取向,常用的有以下几个

    • ch.qos.logback.core.ConsoleAppender:控制台
    • ch.qos.logback.core.rolling.RollingFileAppender:文件大小到达指定大小的时候生成一个新的文件
    • ch.qos.logback.core.FileAppender:文件

    root

    root:用来设置某一个包或者具体的某一个类的日志打印级别、以及指定

    fileAppender配置

    输出到log文件

    
    <configuration>
        
        <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>
    
        <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
    
        
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <target>System.errtarget>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}pattern>
            encoder>
        appender>
    
    
           
        <appender name="file" class="ch.qos.logback.core.FileAppender">
            <target>System.errtarget>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}pattern>
            encoder>
            <file>${log_dir}/logback.logfile>
        appender>
    
        
        <root level="ALL">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        root>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    输出到html文件

    
    <configuration>
        
        <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>
    
        <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
    
        
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <target>System.errtarget>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}pattern>
            encoder>
        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%mpattern>
                layout>
            encoder>
            
            <file>${log_dir}/logback.htmlfile>
        appender>
    
        
        <root level="ALL">
            <appender-ref ref="console"/>
            <appender-ref ref="htmlFile"/>
        root>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    RollingFileAppender配置
    
    <configuration>
        
        <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>
    
        <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
    
        
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <target>System.errtarget>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}pattern>
            encoder>
        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.logfile>
            
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                
            <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gzfileNamePattern>
            
            <maxFileSize>20kbmaxFileSize>
        rollingPolicy>
        appender>
    
        
        <root level="ALL">
            <appender-ref ref="console"/>
            <appender-ref ref="rollFile"/>
        root>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    filter和异步日志
    
    <configuration>
        
        <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>
    
        <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
    
        
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <target>System.errtarget>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}pattern>
            encoder>
        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.logfile>
            
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                
                <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gzfileNamePattern>
                
                <maxFileSize>20kbmaxFileSize>
            rollingPolicy>
            
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                
                <level>errorlevel>
                <onMatch>ACCEPTonMatch>
                <onMismatch>DENYonMismatch>
            filter>
        appender>
    
        
        <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
            <appender-ref ref="rollFile"/>
        appender>
    
    
        
        <root level="ALL">
            <appender-ref ref="console"/>
            <appender-ref ref="async"/>
        root>
    
    
        
        <logger name="com.machoul" level="debug" additivity="false">
            <appender-ref ref="rollFile"/>
        logger>
    
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    logback-access的使用

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

    官方配置的地址:https://logback.qos.ch/access.html#configuration

    1. logback-access.jarlogback-core.jar复制到$TOMCAT_HOME/lib/目录下
    2. 修改$TOMCAT_HOME/conf/server.xml中的Host元素中添加:
    <Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
    
    • 1
    1. logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml
    
    <configuration>
      
      <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.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>access.%d{yyyy-MM-dd}.log.zipfileNamePattern>
        rollingPolicy>
        <encoder>
    			 
          <pattern>combinedpattern>
        encoder>
      appender>
      
      <appender-ref ref="FILE"/>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    【多线程进阶】synchronized 原理
    【前端】HTML5 Audio 预加载 按照队列顺序播放音频, 可以陆续往队列中加内容
    JavaScript:生成器函数
    C++入门03——程序流程结构
    2022年国家高新企业认定申报最全问答-财务数据篇
    对象模型(对象树)
    vue video 多个视频切换后视频不显示的解决方法
    等级保护2.0安全体系框架新升级,山石网科助力企业网络安全建设
    MySQL高级:函数(二)自定义函数
    查出来这个表中evaluation_num字段中以2023开头的最大的尾数是几,instr用法
  • 原文地址:https://blog.csdn.net/qq_34932086/article/details/127671158