【LogBack】logback日志配置及日志分离

在java项目中,一般用到的日志框架log4j,logback,在对比两者的使用上我更倾向于使用logback,因为在我看来logback配置更加简单和效率,项目中日志记录的完整能够帮助我们更好的分析解决线上出现的各种问题,方便问题的快速定位。 
项目中用到日志的几个场景:记录后台的sql输出,记录主要业务的执行,报警系统需要对不同的日志进行监控,需要做日志的分离等。 
废话不多说,以下是logback.xml的配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>native-business</contextName>
    <!--<property file="/application.properties.vm" />-->
    <!-- 日志保存路径为tomcat下面的logs下面的mobileLog文件夹,logback会自动创建文件夹,这样设置了就可以输出日志文件了 -->
    <!--<substitutionProperty name="logbase" value="${catalina.base}/logs/" />-->
    <!--<property name="logback.logPath" value="${catalina.base}/logs/" />-->
    <property name="logback.logPath" value="${catalina.base}/logs/project-web/" />
    <!--<property name="logback.fixedWindowRollingPolicy.minIndex" value="1" />
    <property name="logback.fixedWindowRollingPolicy.maxIndex" value="200" />
    <property name="logback.SizeBasedTriggeringPolicy.maxFileSize" value="1MB" />-->
    <property name="logbase" value="${logback.logPath}" />

    <!-- 这个是要配置输出文件的-->
    <jmxConfigurator />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <encoder>
            <pattern>%date [%thread] %-5level %logger{80} [%file:%line] %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 当前Log文件名 -->
        <file>${logbase}project.log</file>
        <encoder>
            <pattern>%date [%thread] %-5level %logger{80} [%file:%line] %msg%n</pattern>
            <!-- <pattern>%p %t %c - %m%n</pattern> -->
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logbase}project.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>

      <!--  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${logback.SizeBasedTriggeringPolicy.maxFileSize}</maxFileSize>
        </triggeringPolicy>-->
    </appender>

    <appender name="tmt" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 当前Log文件名 -->
        <file>${logbase}tmt.log</file>
        <encoder>
            <pattern>%date [%thread] %-5level %logger{80} [%file:%line] %msg%n</pattern>
            <!-- <pattern>%p %t %c - %m%n</pattern> -->
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logbase}tmt.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--<minIndex>1</minIndex>
            <maxIndex>200</maxIndex>-->
        </rollingPolicy>

        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${logback.SizeBasedTriggeringPolicy.maxFileSize}</maxFileSize>
        </triggeringPolicy>-->
    </appender>

    <appender name="tmtError" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 当前Log文件名 -->
        <file>${logbase}tmt_error.log</file>
        <encoder>
            <pattern>%date [%thread] %-5level %logger{80} [%file:%line] %msg%n</pattern>
            <!-- <pattern>%p %t %c - %m%n</pattern> -->
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logbase}tmt_error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--<minIndex>1</minIndex>
            <maxIndex>200</maxIndex>-->
        </rollingPolicy>

       <!-- <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${logback.SizeBasedTriggeringPolicy.maxFileSize}</maxFileSize>
        </triggeringPolicy>-->
    </appender>
    <!--这里可以对不同的类进行日志的监控-->
    <logger name="com.*.*.*" level="ERROR,INFO,DEBUG">
        <appender-ref ref="tmt" />
        <appender-ref ref="tmtError" />
    </logger>  
    <logger name="com.*" level="INFO" additivity="false">
        <appender-ref ref="FILE" />
    </logger>  
   <root>
        <level value="INFO" />
        <appender-ref ref="STDOUT" />
    </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
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

基于以上的配置文件,说一下具体的标签的功能和需要注意的一些事项。

  • configuration: 
    property标签:用来定义一些参数信息,可定义日志的路径以及变量的值。 
    appender标签:用来定义日志的输出文件。 
    appender中有两个必要属性name和class。name指定appender名称,class指定appender的全限定名. 
    ConsoleAppender类:定义了日志在控制台进行输出。 encoder标签对日志进行格式化。

例如:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
    <encoder>  
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>  
    </encoder>  
  </appender>
  • 1
  • 2
  • 3
  • 4
  • 5
  • FileAppender类:定义了将日志输出到file中,标签如下。 
    file:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。 append:如果是 
    true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。 
    encoder:对记录事件进行格式化。(具体参数稍后讲解 ) prudent:如果是 
    true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。

例如:

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">  
    <file>testFile.log</file>  
    <append>true</append>  
    <encoder>  
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>  
    </encoder>  
  </appender>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • RollingFileAppender:滚动记录文件,先将日志记录到文件,当符合条件时将日志记录到另外的文件,具体的标签如下: 
    file:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。 append:如果是 
    true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。 
    encoder:对记录事件进行格式化。(具体参数稍后讲解 ) rollingPolicy:当发生滚动时,决定 
    RollingFileAppender 的行为,涉及文件移动和重命名。 triggeringPolicy : 告知 
    RollingFileAppender 合适激活滚动。 
    prudent:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。
  • rollingPolicy: 
    TimeBasedRollingPolicy:最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点: 
    fileNamePattern:设置文件的分割后的名称。格式形如:${logbase}tmt.%d{yyyy-MM-dd}.log 
    maxHistory:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且maxHistory是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。
  • triggeringPolicy: 
    SizeBasedTriggeringPolicy:查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:maxFileSize:这是活动文件的大小,默认值是10MB。

基本的配置就如上述所说的,接下来说一下日志的级别,日志的级别有:trace,debug,info,warn,error这些级别,优先级依次增加,如果项目中定义的日志级别是debug,则debug,info,warn,error都将记录, 
如果定义了warn级别,则只记录warn和error。项目中的日志级别需谨慎定义,防止出现日志漏记的情况。

展开阅读全文

没有更多推荐了,返回首页