Springboot日志配置

Springboot日志配置

生产环境日志及预警 https://blog.csdn.net/weixin_41158378/article/details/110701328

1. SpringBoot 日志常用配置

日志常用配置项 默认值 说明
logging.file 日志输出的文件
logging.level.ROOT info 设置日志的输出级别
logging.level.* info 定义指定包的输出级别
logging.config logback-spring.xml 日志的配置文件
# 日志输出的地址:Spring Boot默认并没有进行文件输出,只在控制台中进行了打印
logging.file=/home/zhou
# 日志级别 debug-> info -> warning -> error
# 默认级别为 info
# 如果设置了debug=true的时候,日志级别会自动降低为debug

# ROOT代表默认全局设置
logging.level.ROOT=INFO
# 可以设置指定包的输出级别,这样的话,指定的包,级别以下的日志就不在打印或者写入日志文件
logging.level.org.springframework=ERROR
logging.level.org.apache=ERROR

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="D:/log" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--按pattern指定的路径格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符,编码为UTF-8-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 定义一个日滚动(每天生成一份)的日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符,编码为UTF-8-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 在日滚动文件中,强制只保存错误INFO级别以上的信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 定义日志全局最低输出级别,同时向控制台和日滚动文件输出 -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

想要自定义文件名的可在配置文件中添加logging.config配置

logging.config=classpath:loggging-dev.xml

2. 选择合适的日志打印级别

  • trace:更加具体的调试信息,例如调试用了什么方法,参数是什么,可以用trace

  • debug:在项目开发阶段,调试程序的正确性,可以使用debug

  • info:正常的业务执行流程,系统的启动/关闭,需要做的审计等都可以使用info

  • warn:不是错误,不会影响程序的正常执行,但是不建议这么做,可以用warn

  • error:程序出现某种错误,需要介入处理

3. 合理日志记录,需要遵守的原则

  • 搞清楚当前工程的日志级别(开发、测试还是生产环境),保证日志可以被打印

  • 使用参数化形式{}占位,[]进行参数隔离

  • 日志文件的名称应该是可以自解释的,通常至少会要求名称中包含类型标识和时间标识

  • 日志要有滚动策略,这是考虑到避免单个文件过大,以及磁盘占用问题

    让你的日志有意义且不冗余

  1. HTTP请求和远程接口调用(HTTP或RPA)时,需要打印请求的入参和结果,如果入参和结果参数都很大,只需要打印核心的参数和结果(logging.info)

  2. 程序异常的原因(logging.error)

  3. 特殊的条件分支

    需要规避的日志打印过程

  4. 以下场景不应该打日志

    • 大数据日志 空间的浪费,可以使用trace或debug,避免生产环境出现这样的大数据日志
    • 在循环中打日志,特别是大循环 排查问题困难
    • 没有意义的日志,对于系统维护没有帮助
    • 如果日志什么都说明不了,那一定要考虑修改或删除这条日志,混淆视听
    • 密码,邮箱,手机号码属于私密信息,为了避免数据泄露,不应该打,数据泄露

日志能够对业务逻辑进行解释

  1. 日志应该包含哪些元素

    日志级别、日志内容、日志时间、线程名称、类方法名 (行号、异常堆栈:可有可无)

posted @ 2021-10-19 22:09  肖恩雷  阅读(1220)  评论(1编辑  收藏  举报