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>

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

  • 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>
  • 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>
  • 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。项目中的日志级别需谨慎定义,防止出现日志漏记的情况。
QQ交流群:
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java Logback是一个灵活的日志框架,它是SLF4J的实现之一。Logback提供了一组丰富的成员方法来配置和使用日志记录功能。下面是一些常用的Logback成员方法: 1. getLogger(Class<?> clazz):获取一个Logger对象,用于记录指定类的日志。参数clazz是要记录日志的类。 2. getLogger(String name):获取一个Logger对象,用于记录指定名称的日志。参数name是日志的名称。 3. setLevel(Level level):设置日志记录器的日志级别。参数level是一个枚举类型,表示日志级别,包括TRACE、DEBUG、INFO、WARN、ERROR。 4. addAppender(Appender<E> appender):向日志记录器添加一个Appender,用于将日志输出到指定的目标。参数appender是要添加的Appender对象。 5. detachAndStopAllAppenders():从日志记录器中分离并停止所有的Appender。 6. info(String message):记录一条INFO级别的日志消息。参数message是要记录的消息。 7. debug(String message):记录一条DEBUG级别的日志消息。参数message是要记录的消息。 8. warn(String message):记录一条WARN级别的日志消息。参数message是要记录的消息。 9. error(String message):记录一条ERROR级别的日志消息。参数message是要记录的消息。 10. trace(String message):记录一条TRACE级别的日志消息。参数message是要记录的消息。 这些是Logback的一些常用成员方法,通过使用这些方法,可以方便地配置和使用Logback日志框架。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值