SpringBoot攻略十、日志记录logback

SpringBoot默认使用LogBack日志系统,LogBack默认将日志打印到控制台上。
默认情况下会记录ERROR-level,WARN-level和INFO-level消息。

启用调试模式,会打印很多无用信息,一般不设置:
application.properties配置debug=true

如何输出日志到文件

application.properties配置如下:
logging.path=D:/log
logging.file=springboot.log
注意:
在windows下不会在D:/log下创建springboot.log,而是在项目根目录下创建 springboot.log。

如果想要在D:/log创建怎么办呢?
我们只需要设置logging.file=D:/log/springboot.log,logging.path无需做任何设置。

logging.file.max-size
设置文件大小,默认为10M,达到限制后会切换一个新文件。
logging.file.max-history
以前日志文件归档大小,只保留多久或多大的日志,如果不设置就会无限期归档。
logging.file.total-size-cap
日志归档的总大小,当日志存档的总大小超过该阈值时,将删除备份。

如何设置日志级别

日志级别总共有TARCE < DEBUG < INFO < WARN < ERROR < FATAL ,且级别是逐渐提供, 如果日志级别设置为INFO,则意味TRACE和DEBUG级别的日志都看不到。

Spring Boot默认级别就是INFO。

applicaition.properties配置(logging.level配置日志级别):
logging.level.root=INFO
root:即项目的所有日志。

使用package级别
logging.level.druid.sql=DEBUG

如何定制日志格式

logging.pattern.console=
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger[%line] - %msg%n
logging.pattern.file=
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger[%line] - %msg%n

%d{yyyy-MM-dd HH:mm:ss.SSS}——日志输出时间
%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
%-5level——日志级别,并且使用5个字符靠左对齐
%logger——日志输出者的名字
%line——行号
%msg——日志消息
%n——平台的换行符

自定义日志配置

logback:默认加载logback-spring.xml,logback-spring.groovy,logback.xml,或者 logback.groovy;
Log4j: 默认加载log4j-spring.xml,log4j.xml;
JDK: 默认加载logging.properties,都是类路径下。

如果需要自定义文件:
logging.config=classpath:conf/xml/logback.xml # 用于配置外部logback.xml

实例logback-spring.xml(推荐)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- tomcat路径为:D:\tomcat\bin
        value="logs"或者value="./logs"    – D:\tomcat\bin\logs
        value="/logs"                   – D:\logs
        value="../logs"                 – D:\tomcat\logs -->
    <property name="LOG_HOME" value="/var/logs/GeneralSBM" />
    <property name="LOG_ERROR_HOME" value="/var/logs/GeneralSBM/error" />
    
    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger[%line] - %msg %n</pattern>
        </encoder>
    </appender>

    <!-- 文件输出 -->
    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- <file>${LOG_HOME}/app.log</file> -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 如果按天来回滚,则最大保存时间为60天,60天之前的都将被清理掉,这里的值与滚动策略模式有关 -->
            <maxHistory>60</maxHistory>
            <!-- 按照日期进行归档,并且对日志文件大小进行限制 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 设置文件大于100MB进行压缩归档 ,此时fileNamePattern要加%i -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger[%line] - %msg %n</pattern>
        </encoder>
    </appender>
    
    <!-- ERROR文件输出 -->
    <appender name="errorRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- <file>${LOG_HOME}/app.log</file> -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_ERROR_HOME}/app.error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 如果按天来回滚,则最大保存时间为60天,60天之前的都将被清理掉,这里的值与滚动策略模式有关 -->
            <maxHistory>60</maxHistory>
            <!-- 按照日期进行归档,并且对日志文件大小进行限制 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 设置文件大于100MB进行压缩归档 ,此时fileNamePattern要加%i -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger[%line] - %msg %n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <!-- spring profile不同环境不同设置 -->
    <springProfile name="dev,test">
        <!-- 打印sql -->
        <logger name="druid.sql" level="DEBUG" />
    </springProfile>
    
    <springProfile name="prod">
        <logger name="druid.sql" level="INFO" />
    </springProfile>
    
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="rollingFile" />
        <appender-ref ref="errorRollingFile" />
    </root>
</configuration>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容