Spring Boot Log Configuration


Spring Boot 默认日志

如果是继承Starter使用Spring Boot,则默认使用的是logback,不过不用担心,不管依赖的那些库使用的是什么日志框架,通常你不需要改变任何日志依赖,Springboot可以确保那些框架都能正常的工作。

Log Level

默认情况下springboot会将info及以上级别的log回显在console里,可以使用debug=truetrace=true显示更加详细的日志。

也可以指定某些特定类的日志输出级别,例如之前使用的ucc依赖,心跳日志是info级别特别烦人。在配置文件中设置logging.level.com.jverson.springboot.HelloWorld = WARN即可将HelloWorld类的日志输出限制为WARN级别。

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

File output

默认情况下Springboot只会将日志输出到console,并不会输出为文件。如果需要记录为文件则需要在配置文件中指定日志输出路径(logging.file)和名称(logging.path)。 例如在配置文件中设置logging.file = /export/Logs/mylog.log,则日志便会输出到该目录下,并且文件大小达到10MB时便会自动分割。但是发现这样并没有办法将日志按照Level输出到不同的文件中,如果想实现则需要在classpath下添加logback-spring.xml(推荐)或logback.xml配置文件。

Custom log configuration

如果不想使用默认的logback日志框架,可以添加其它框架的依赖(例如log4j2),Log4j2.0基于LMAX Disruptor的异步日志在多线程环境下性能会远远优于Log4j1.x和logback(官方数据是10倍以上)。具体的使用流程如下:

首先添加log4j2的依赖,并将springboot自带的log框架排除掉

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions><!-- 去掉默认配置 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

<!-- use log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--使用log4j2的AsyncLogger需要包含disruptor-->
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.3.4</version>
</dependency>

然后添加log4j2的配置文件log4j2-spring.xml(按照命名规范命名的话可以不需要再properties文件中设置logging.config = classpath:log4j2-spring.xml),典型的配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF" monitorInterval="1800">
    <properties>
        <property name="LOG_HOME">/export/Logs/jverson.com</property>
        <property name="RUNNING_FILE_NAME">spring-boot-test</property>
        <property name="ERROR_FILE_NAME">spring-boot-test-error</property>
    </properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss.SSS} [%t] %-5level %class{36} [%L] [%M] - %msg%xEx%n" />
        </Console>
        <RollingRandomAccessFile name="RUNNING-LOG" fileName="${LOG_HOME}/${RUNNING_FILE_NAME}.log" filePattern="${LOG_HOME}/${RUNNING_FILE_NAME}_%d{yyyy-MM-dd}_%i.log">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss.SSS} [%t] %-5level %class{36} [%L] [%M] - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="24" />
                <SizeBasedTriggeringPolicy size="51200 KB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="ERROR-LOG" fileName="${LOG_HOME}/${ERROR_FILE_NAME}.log" filePattern="${LOG_HOME}/${ERROR_FILE_NAME}_%d{yyyy-MM-dd}_%i.log">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss.SSS} [%t] %-5level %class{36} [%L] [%M] - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="24" />
                <SizeBasedTriggeringPolicy size="51200 KB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <AsyncRoot level="INFO" includeLocation="true">
            <appender-ref ref="Console" />
            <appender-ref ref="RUNNING-LOG" />
            <appender-ref ref="ERROR-LOG" />
        </AsyncRoot>
    </Loggers>
</Configuration>

Add color to eclipse console output by log level

如果你希望console里的日志能够按照不同的级别有不同的着色,如下图这样便于查看错误和异常日志,有一个很好用的eclipse插件Grep console可以帮你实现。

首先安装Grep console插件,在help页签eclipse market中搜索Grep console并安装(完成后需要重启eclipse),然后在preferences中进行设置如下图,一定注意将expression由.*(\Q[FATAL]\E).*改为.*(\QFATAL\E).*,要不然不会生效。

另外可以在windows页签view中选择将grep view窗口展示出来,可以将一些日志过滤到grep view中,便于查看。

关于grep console的更多设置及其含义可以参考以下链接:

参考

  1. Apache Log4j 2
  2. Configure Log4j for logging
Copyright © jverson.com 2018 all right reserved,powered by GitbookFile Modify: 2019-09-21 11:12:52

results matching ""

    No results matching ""