Spring Boot 日志配置

假装没事ソ 提交于 2020-01-23 21:44:35

Spring Boot支持 JavaUtil Logging、 Log4J、 Log4J2和 Logback作为日志框架,无论使用哪种日志框架, Spring Boot已为当前使用日志框架的控制台输出及文件输出做好了配置,默认情况下, Spring Boot使用 Logback作为日志框架。

配置 logback(官方推荐使用)

配置日志文件

spring boot 默认会加载 classpath:logback-spring.xml 或者 classpath:logback-spring.groovy。

如需要自定义文件名称,在 application.properties 中配置 logging.config 选项即可。

在 src/main/resources 下创建 logback-spring.xml 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <!-- 文件输出格式 -->

    <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" />

    <!-- test文件路径 -->

    <property name="TEST_FILE_PATH" value="d:/test.log" />

    <!-- pro文件路径 -->

    <property name="PRO_FILE_PATH" value="/opt/test/log" />

    

    <!-- 开发环境 -->

    <springProfile name="dev">

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

            <encoder>

                <pattern>${PATTERN}</pattern>

            </encoder>

        </appender>

        <logger name="com.light.springboot" level="debug" />

        <root level="info">

            <appender-ref ref="CONSOLE" />

        </root>

    </springProfile>

    

    <!-- 测试环境 -->

    <springProfile name="test">

        <!-- 每天产生一个文件 -->

        <appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <!-- 文件路径 -->

            <file>${TEST_FILE_PATH}</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <!-- 文件名称 -->

                <fileNamePattern>${TEST_FILE_PATH}/info.%d{yyyy-MM-dd}.log</fileNamePattern>

                <!-- 文件最大保存历史数量 -->

                <MaxHistory>100</MaxHistory>

            </rollingPolicy>

            <layout class="ch.qos.logback.classic.PatternLayout">

                <pattern>${PATTERN}</pattern>

            </layout>

        </appender>

        <root level="info">

            <appender-ref ref="TEST-FILE" />

        </root>

    </springProfile>

    

    <!-- 生产环境 -->

    <springProfile name="prod">

        <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <file>${PRO_FILE_PATH}</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern>

                <MaxHistory>100</MaxHistory>

            </rollingPolicy>

            <layout class="ch.qos.logback.classic.PatternLayout">

                <pattern>${PATTERN}</pattern>

            </layout>

        </appender>

        <root level="warn">

            <appender-ref ref="PROD_FILE" />

        </root>

    </springProfile>

</configuration>

其中,springProfile 标签的 name 属性对应 application.properties 中的 spring.profiles.active 的配置。即 spring.profiles.active 的值可以看作是日志配置文件中对应的 springProfile 是否生效的开关。

配置 log4j2

添加依赖

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-log4j2</artifactId>

</dependency>

配置日志文件

spring boot 默认会加载 classpath:log4j2.xml 或者 classpath:log4j2-spring.xml。

如需要自定义文件名称,在 application.properties 中配置 logging.config 选项即可。

log4j2.xml 文件内容如下:

<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <properties>

        <!-- 文件输出格式 -->

        <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</property>

    </properties>

    <appenders>

        <Console name="CONSOLE" target="system_out">

            <PatternLayout pattern="${PATTERN}" />

        </Console>

    </appenders>

    <loggers>

        <logger name="com.light.springboot" level="debug" />

        <root level="info">

            <appenderref ref="CONSOLE" />

        </root>

    </loggers>

</configuration>

log4j2 不能像 logback 那样在一个文件中设置多个环境的配置数据,只能命名 3 个不同名的日志文件,分别在 application-dev,application-test 和 application-prod 中配置 logging.config 选项。

除了在日志配置文件中设置参数之外,还可以在 application-*.properties 中设置,日志相关的配置:

logging.config # 日志配置文件路径,如 classpath:logback-spring.xml

logging.exception-conversion-word # 记录异常时使用的转换词

logging.file # 记录日志的文件名称,如:test.log

logging.level.* # 日志映射,如:logging.level.root=WARN,logging.level.org.springframework.web=DEBUG

logging.path # 记录日志的文件路径,如:d:/

logging.pattern.console # 向控制台输出的日志格式,只支持默认的 logback 设置。

logging.pattern.file # 向记录日志文件输出的日志格式,只支持默认的 logback 设置。

logging.pattern.level # 用于呈现日志级别的格式,只支持默认的 logback 设置。

logging.register-shutdown-hook # 初始化时为日志系统注册一个关闭钩子

配置输出的地址和输出级别

logging.file=D:/myylog/log.log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR

配置日志文件, 格式为logging.level.包名=级别:

整合Slf4j+logback

logback和log4j以及log4j2三者,推荐使用logback,因为logback的效率显著高于log4j,而且logback也是Springboot推荐并且默认使用的日志系统。Slf4j的全称是Simple Loging Facade For Java(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已。所以单独的Slf4j是不能工作的,必须搭配其他具体的日志实现方案

log level

Slf4j有四个级别的log level可供选择,级别从上到下由低到高,优先级高的将被打印出来。

  • debug:简单来说,对程序调试有利的信息都可以debug输出
  • info:对用户有用的信息
  • warn:可能会导致错误的信息
  • error:顾名思义,发生错误的地方

1、配置依赖

 <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
 </dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

RollingFileAppender

随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:

<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>/usr/local/log/app.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <FileNamePattern>logback.%d{yyyy-MM-dd}.log</FileNamePattern>
        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
    </encoder>
</appender>

示例:

@Slf4j
@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {        
        log.info("hello Sfl4j + logback......");
        return "Hello World";
    }
}

参考:

http://blog.csdn.net/catoop/article/details/50501714

https://www.cnblogs.com/gavincoder/p/10090592.html

https://blog.csdn.net/u011271894/article/details/75735915

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!