2501-Logback的使用与配置范例xml

在项目中logback一般配合slf4j使用,slf4j是面上的框架,logback才是真正记录处理日志的框架。
参考文献:

  1. Java日志框架:logback详解 http://www.importnew.com/28541.html
  2. 官网文档 对内置的appender进行详细的说明 https://logback.qos.ch/manual/appenders.html

logback配置slf4j在代码中记录日志很简单,显然易得,复杂之处在于logback的xml配置文件。

application.propertities中指定logback的配置文件
#logging 配置logback的xml
logging.config=classpath:logback-simpleconfig.xml
代码中
private final static Logger logger = LoggerFactory.getLogger(UserController.class);
logger.info("logback  info 成功了");

记录理解

logback的configuration

logback的重点应当是Appender、Logger、Pattern,在这之前先简单了解一下logback的

用来设置某一个包或者具体某一个类的日志打印级别、以及指定<appender>。<logger>可以包含零个或者多个<appender-ref>元素,标识这个appender将会添加到这个logger。<logger>仅有一个name属性、一个可选的level属性和一个可选的additivity属性:
name:用来指定受此logger约束的某一个包或者具体的某一个类
level:用来设置打印级别,五个常用打印级别从低至高依次为TRACE、DEBUG、INFO、WARN、ERROR,如果未设置此级别,那么当前logger会继承上级的级别
additivity:是否向上级logger传递打印信息,默认为true

<appender>是<configuration>的子节点,是负责写日志的组件。<appender>有两个必要属性name和class:name指定<appender>的名称,class指定<appender>的全限定名
appender有很多种,常用的例如ConsoleAppender,是将日志输出到控制台;RollingFileAppender是文件输出并滚动覆盖

xml配置文件示例:

  1. 简版
    提供控制台输出,日志输出到文件
    ```

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
        <!-- 文件名:log/sys.2017-12-05.0.log -->
        <fileNamePattern>${LOG_HOME_PATH}/level_info.%d.%i.log</fileNamePattern>
        <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
        <maxHistory>30</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
        <pattern>${encoder_pattern}</pattern>
        <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
        <charset>UTF-8</charset>
    </encoder>


2. 复杂版
提供控制台输出,日志输出到文件,分级别记录,对于INFO级别的日志使用异步输出

<!--配置变量-->
<!--文件路径前缀-->
<property name="LOG_HOME_PATH" value="file_logs"/>
<property name="encoder_pattern" value="%d{yyyy/MM/dd HH:mm:ss.SSS} %-5level [%thread] [%c{0}:%L] : %msg%n"/>

<!-- appender是configuration的子节点,是负责写日志的组件。 -->

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- ConsoleAppender:把日志输出到控制台 -->
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
    <encoder>
        <pattern>${encoder_pattern}</pattern>
        <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>

<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
        <!-- 文件名:log/sys.2017-12-05.0.log -->
        <fileNamePattern>${LOG_HOME_PATH}/level_info.%d.%i.log</fileNamePattern>
        <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
        <maxHistory>30</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
        <pattern>${encoder_pattern}</pattern>
        <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
        <charset>UTF-8</charset>
    </encoder>
    <!-- 只打印WARN日志 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
    <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
        <!-- 文件名:log/sys.2017-12-05.0.log -->
        <fileNamePattern>${LOG_HOME_PATH}/level_debug.%d.%i.log</fileNamePattern>
        <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
        <maxHistory>30</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
        <pattern>${encoder_pattern}</pattern>
        <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
        <charset>UTF-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->
        <level>DEBUG</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
    <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
        <!-- 文件名:log/sys.2017-12-05.0.log -->
        <fileNamePattern>${LOG_HOME_PATH}/level_error.%d.%i.log</fileNamePattern>
        <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
        <maxHistory>30</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
        <pattern>${encoder_pattern}</pattern>
        <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
        <charset>UTF-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>
<!-- 异步输出 -->
<appender name ="ASYNC_INFO" class= "ch.qos.logback.classic.AsyncAppender">
    <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
    <discardingThreshold>0</discardingThreshold>
    <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
    <queueSize>256</queueSize>
    <!-- 添加附加的appender,最多只能添加一个 -->
    <appender-ref ref ="FILE_INFO"/>
</appender>

<!-- 控制台输出日志级别 -->
<root level="INFO">
    <appender-ref ref="STDOUT"/>
    <!--<appender-ref ref="FILE_INFO"/>-->
    <!--FILE_DEBUG暂时用不上-->
    <!--<appender-ref ref="FILE_DEBUG"/>-->
    <!--<appender-ref ref="FILE_ERROR"/>-->
    <!--<appender-ref ref="FILE_SELF"/>-->
    <appender-ref ref="ASYNC_INFO"/>
</root>

<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->


```

猜你喜欢

转载自www.cnblogs.com/starmoon1994/p/9103928.html