转载

logback.xml 配置

获取spring中的环境

<springProperty scope="context" name="attr.value" source="spring.attr.value" defaultValue="default"/>

控制台打印

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    <charset>UTF-8</charset>
    </encoder>
</appender>

RollingFile 写入日志文件

<appender name="XXX_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logging.path}/xxx.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${logging.path}/xxx-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>30</maxHistory>
        <totalSizeCap>10GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

区分环境

<springProfile name="prod,release">
    <logger name="com.xxx"/>
    <logger name="com.xxx.xxx" level="WARN" additivity="false">
        <appender-ref ref="TIMER_APPENDER"/>
        <appender-ref ref="STDOUT"/>
    </logger>
</springProfile>

logger的作用

定义一个日志执行者,用来设置某一个包或者具体的某一个类的日志打印级别、以及指定 appender-ref

  • name:一个包名或者一个确切的类名
  • level:级别
  • addtivity: 是否向上级loger传递打印信息, 默认是true。当为false时,别是不想上传递,可以起到避免重复打印日志的作用

模块化日志

在实际项目中有很多情况下需要区分业务模块来写入不同的日志文件,而不是随着其他日志混为一谈,尤其是日志具有价值的时候,例如埋点日志,如果都写在同一个文件里面,那么可读性很差,所以需要把日志区分出来。

举例说明,例如想把数据的sql日志统一写道一个日志文件中:

<appender name="DATABASE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/db.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/db-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>60</maxHistory>
        <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>
<!-- 然后还需要再looger里面引用 -->
<springProfile name="release">
    <logger name="xxx.mapper" level="DEBUG" additivity="false">
        <appender-ref ref="DATABASE"/>
    </logger>
</springProfile>

root的意义

root 其实也是一个logger, 只不过是根级的logger, 也就是任意包都会执行,也就是如果不配置logger的时候,全部日志默认都会走他,或者在logger不配置appender-ref的时候,会继承root的appender-ref。

原文  https://segmentfault.com/a/1190000021282364
正文到此结束
Loading...