SpringBoot配置log4j2日志及输出到文件中

文章目录

  • 一、java.util.logging、log4j、slf4j的区别
  • 二、配置日志
  • 三、指定输出文件
    • 1.如果只是使用默认的logback ,只需要在application.properties中配置
    • 2. 使用log4j2
  • 四、控制台日志添加颜色
    • 4.1 修改Intellj IDEA配置
    • 4.2 添加高亮
  • 五、定期删除日志文件

一、java.util.logging、log4j、slf4j的区别

java.util.logging
java自带的日志实现类

log4j
比java.util.logging功能更加丰富的日志实现类
具体差别请看Log4j 对比 java.util.logging

而Log4j 2是Log4j的升级版本,Log4j 2相对于Log4j 1.x 有了很多显著的改善。

slf4j
日志的整体抽象层,可以任意切换使用多个日志相关jar包

Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置

二、配置日志

引入log4j2日志

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <!-- 排除springboot默认的logback日志框架 -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 引入日志依赖 自带slf4j-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

日志配置文件

使用方法

Logger log = LoggerFactory.getLogger(TestController.class);

log.info("get available prefix index file {}", codePrefixIndex);

三、指定输出文件

1.如果只是使用默认的logback ,只需要在application.properties中配置

############################################################
#
# 日志 配置
#
############################################################

# 配置日志的生成目录,只设置这个的话,系统默认生成的日志文件名为spring.log
#logging.path = mylog/

# 配置日志文件名和路径,系统推荐(如果logging.path和logging.file同时存在,只有logging.file有效)
#logging.file= mylog/myspring.log

2. 使用log4j2

根据日期分类





<configuration status="WARN" monitorInterval="1800">
    <Properties>
        
        
        <property name="basePath">log4j2Logsproperty>
        

        
        <property name="console_log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS}  %highlight{%-5level %l} -
            %m%n
        property>

        
        <property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M -
            %m%n
        property>
        
        <property name="every_file_size">20MBproperty>
        
        <property name="output_log_level">DEBUGproperty>



        
        <property name="rolling_fileName">${basePath}/all.logproperty>
        
        <property name="rolling_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-all.log.zip
        property>
        
        <property name="rolling_max">50property>



        
        <property name="info_fileName">${basePath}/info.logproperty>
        
        <property name="info_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-info.log.zip
        property>
        
        <property name="info_max">10property>



        
        <property name="warn_fileName">${basePath}/warn.logproperty>
        
        <property name="warn_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-warn.log.zip
        property>
        
        <property name="warn_max">10property>

        
        <property name="error_fileName">${basePath}/error.logproperty>
        
        <property name="error_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-error.log.zip
        property>
        
        <property name="error_max">10property>

        
        <property name="console_print_level">DEBUGproperty>


        
        <property name="druid_fileName">${basePath}/druid.logproperty>
        
        <property name="druid_filePattern">${basePath}/time-based-logs/%d{yyyy-MM-dd}-druid.log.zip
        property>
        
        <property name="druid_max">10property>

    Properties>

    
    <appenders>
        
        <Console name="Console" target="SYSTEM_OUT">
            
            <ThresholdFilter level="${console_print_level}" onMatch="ACCEPT" onMismatch="DENY"/>
            
            <PatternLayout pattern="${console_log_pattern}"/>
        Console>

        
        <RollingFile name="RollingFile" fileName="${rolling_fileName}"
                     filePattern="${rolling_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            <Policies>
                
                <OnStartupTriggeringPolicy />
                
                <SizeBasedTriggeringPolicy size="20 MB" />
                
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                
                <DefaultRolloverStrategy max="${info_max}">
                <Delete basePath="${basePath}/time-based-logs/" maxDepth="2">
                    <IfFileName glob="*.log.zip" />
                    
                    
                    
                    
                    <IfLastModified age="720H" />
                Delete>
            DefaultRolloverStrategy>
            Policies>
            
        RollingFile>

        
        <RollingFile name="InfoFile" fileName="${info_fileName}"
                     filePattern="${info_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>

            
            <Filters>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            Filters>
            <Policies>
                
                <OnStartupTriggeringPolicy />
                
                <SizeBasedTriggeringPolicy size="${every_file_size}" />
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <DefaultRolloverStrategy max="${info_max}"/>
            Policies>
        RollingFile>

        
        <RollingFile name="WarnFile" fileName="${warn_fileName}"
                     filePattern="${warn_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
            Filters>
            <Policies>
                
                <OnStartupTriggeringPolicy />
                
                <SizeBasedTriggeringPolicy size="${every_file_size}" />
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <DefaultRolloverStrategy max="${info_max}"/>
            Policies>
        RollingFile>

        
        <RollingFile name="ErrorFile" fileName="${error_fileName}"
                     filePattern="${error_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            
            <Filters>
                <ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            Filters>
            <Policies>
                
                <OnStartupTriggeringPolicy />
                
                <SizeBasedTriggeringPolicy size="${every_file_size}" />
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <DefaultRolloverStrategy max="${info_max}"/>
            Policies>
        RollingFile>

        
        <RollingFile name="druidSqlRollingFile" fileName="${druid_fileName}"
                     filePattern="${druid_filePattern}">
            <PatternLayout pattern="${druid_pattern}"/>
            <Policies>
                
                <OnStartupTriggeringPolicy />
                
                <SizeBasedTriggeringPolicy size="${every_file_size}" />
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <DefaultRolloverStrategy max="${info_max}"/>
            Policies>
        RollingFile>
    appenders>

    
    <loggers>

        
        <Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
        <Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
        <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
        <logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
        <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
        <Logger name="org.crsh.plugin" level="warn" />
        <logger name="org.crsh.ssh" level="warn"/>
        <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
        <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
        <logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
        <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
        <logger name="org.thymeleaf" level="warn"/>


        
        <logger name="java.sql" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        logger>

        
        <logger name="druid.sql.Statement" level="debug" additivity="false">
            <appender-ref ref="druidSqlRollingFile"/>
        logger>

        
        <root level="${output_log_level}">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
            <appender-ref ref="InfoFile"/>
            <appender-ref ref="WarnFile"/>
            <appender-ref ref="ErrorFile"/>
        root>
    loggers>
configuration>

四、控制台日志添加颜色

4.1 修改Intellj IDEA配置

Run —> Edit Configurations —>Environment,在VM options中添加
-Dlog4j.skipJansi=false

4.2 添加高亮

上述的console_log_pattern中,添加%highlight {} 被括起来的都会有颜色

<property name="console_log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS}  %highlight{%-5level %l} -
            %m%n
</property>

五、定期删除日志文件

<DefaultRolloverStrategy>
    <Delete basePath="${basePath}/time-based-logs/" maxDepth="2">
        <IfFileName glob="*.log.zip" />
        <!--!Note: 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用
        另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
        <!--只保留7天内日志压缩包-->
        <!--<IfLastModified age="168H" />-->
        <!--只保留一个月内日志压缩包-->
        <IfLastModified age="720H" />
    </Delete>
</DefaultRolloverStrategy>

你可能感兴趣的:(#,Spring)