Java开发统一日志格式

Java开发统一日志格式

1、日志配置

<?xml version="1.0" encoding="UTF-8"?>
<!--控制台输出 -->
<appender name="STDOUT-APPENDER" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] - %-5p - [%c]:%L.%method:%L - %msg%n</Pattern>
    </encoder>
</appender>

<!-- 用来保存输出所有级别的日志 -->
<appender name="DEFAULT-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <File>${log.base}/${log.moduleName}-default.log</File>

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

        <FileNamePattern>${log.base}/history/default/${log.moduleName}- default-%d{yyyy-MM-dd}.%i.log</FileNamePattern>

        <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>${log.max.size}</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>

    </rollingPolicy>

    <!-- 日志输出的文件的格式 -->
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] - %-5p - [%c]:%L.%method:%L - %msg%n</pattern>
    </layout>

</appender>

<!-- 只用保存输出ERROR级别的日志 -->
<appender name="ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <File>${log.base}/${log.moduleName}-error.log</File>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${log.base}/history/error/${log.moduleName}- error-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>${log.max.size}</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] - %-5p - [%c]:%L.%method:%L - %msg%n</pattern>
    </layout>

    <!-- 下面为配置只输出error级别的日志 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>

</appender>

<!-- 只用保存输出WARN级别的日志 -->
<appender name="WARN-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <File>${log.base}/${log.moduleName}-warn.log</File>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${log.base}/history/warn/${log.moduleName}-warn-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>${log.max.size}</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] - %-5p - [%c]:%L.%method:%L - %msg%n</pattern>
    </layout>

    <!-- 下面为配置只输出warn级别的日志 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>WARN</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>

</appender>

<!-- 只用保存输出DEBUG级别的日志 -->
<appender name="DEBUG-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <File>${log.base}/${log.moduleName}-debug.log</File>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${log.base}/history/debug/${log.moduleName}- debug-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>${log.max.size}</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] - %-5p - [%c]:%L.%method:%L - %msg%n</pattern>
    </layout>

    <!-- 下面为配置只输出debug级别的日志 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>

</appender>

<!-- 只用保存输出INFO级别的日志 -->
<appender name="INFO-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <File>${log.base}/${log.moduleName}-info.log</File>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${log.base}/history/info/${log.moduleName}-info-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>${log.max.size}</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] - %-5p - [%c]:%L.%method:%L - %msg%n</pattern>
    </layout>

    <!-- 下面为配置只输出info级别的日志 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>

</appender>

<!-- 只用保存输出TRACE级别的日志 -->
<appender name="TRACE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <File>${log.base}/${log.moduleName}-trace.log</File>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${log.base}/history/trace/${log.moduleName}- trace-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>${log.max.size}</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] - %-5p - [%c]:%L.%method:%L - %msg%n</pattern>
    </layout>

    <!-- 下面为配置只输出trace级别的日志 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>TRACE</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>

</appender>

<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<!-- 添加附加的appender,最多只能添加一个 -->
<appender name="ASYNC-DEFAULT-APPENDER" class="ch.qos.logback.classic.AsyncAppender">
    <discardingThreshold>0</discardingThreshold>
    <queueSize>256</queueSize>
    <includeCallerData>true</includeCallerData>
    <appender-ref ref="DEFAULT-APPENDER" />
</appender>

<!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.xinniu -->
<logger name="com.xinniu" additivity="false">
    <level value="${log.other.level}" />
    <appender-ref ref="STDOUT-APPENDER" />
    <appender-ref ref="ASYNC-DEFAULT-APPENDER" />
    <appender-ref ref="ERROR-APPENDER" />
    <appender-ref ref="WARN-APPENDER" />
    ${log.appender.xniniu}
    <appender-ref ref="DEFAULT-APPENDER" />
</logger>

<!-- root将级别为${log.root.level}及大于${log.root.level}的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console,其它同理 -->
<root level="${log.root.level}">
    <appender-ref ref="STDOUT-APPENDER" />
    <appender-ref ref="ASYNC-DEFAULT-APPENDER" />
    <appender-ref ref="ERROR-APPENDER" />
    <appender-ref ref="WARN-APPENDER" />
    ${log.appender.root}
    <appender-ref ref="DEFAULT-APPENDER" />
</root>
PS:此配置文件除了会按照日志级别分别打印到${log.moduleName}-error.log、${log.moduleName}-info.log等日志文件中,同时为了方便线下环境控制台查看日志,定位问题,该配置也会在控制台打印一份日志,建议线上环境关闭掉控制台日志。

2、 日志使用原则

1、日志打印统一使用logback
2、开发环境、测试环境和灰度环境日志级别可以根据需要配置成info或debug级别,线上环境需要配置成info级别。
3、将不同级别的日志分别打印到不同的日志文件中 l o g . m o d u l e N a m e − e r r o r . l o g 、 {log.moduleName}-error.log、 log.moduleNameerror.log{log.moduleName}-warn.log、 l o g . m o d u l e N a m e − i n f o . l o g 、 {log.moduleName}-info.log、 log.moduleNameinfo.log{log.moduleName}-debug.log等。
4、本系统对外的接口入参、出参必须打印出来,日志级别为info。
5、本系统中调用本系统外接口时必须打印入参、出参,日志级别为info。
6、系统中关键逻辑、容易出错的逻辑处需要打印日志,方便开发和线上环境排查问题,日志级别为info。
7、所有try…catch的地方都需要打印错误日志。
8、错误日志打印时一定要把堆栈打印出来(没有堆栈时可不打印,另外自定义的异常不要打印堆栈信息),方便排查问题时定位原因。例如LOGGER.error(“服务端接口: 根据合同ID获取交易流水列表getListByContractId,params:{} 异常为:”, contractId, e);
9、日志打印时要将敏感字段脱敏或加密。
10、除错误日志以外(错误日志请参考第7、8条),其他日志打印用花括号{}占位符,不要用加号+的形式拼接字符串。例如LOGGER.info(“服务端接口: 根据合同ID获取交易流水列表getListByContractId,params:{}”, contractId);
11、不要使用e.printStackTrace();
12、除测试代码外严禁使用System.out.println()、System.gc()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值