SpringBoot整合Log4j2

同事配置了个鬼配置文件,用都用不了,配的也不对,一气之下把它改了,现在做个笔记,

方便后期用上时直接Ctrl+C\Ctrl+V

主要有一个功用:

1、控制台输出
2、日志保存到文件(按文件大小)
3、日志按级别输出到文件中

1、控制台输出

pom.xml主要配置:

<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>

<!-- 引用log4j2 -->

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

在resources目录下添加log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!--每30秒后重新加载配置文件,因为可能配置文件改了,所以会动态加载,不错-->
<Configuration status="WARN" monitorInterval="30">
    <!--相当于变量-->
    <Properties>
        <Property name="LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss} %l - %msg%n
        </Property>
    </Properties>

    <Appenders>

        <!--控制台输入日志-->
        <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>

    </Appenders>

    <Loggers>
        <!--指定TTest日志级别只能是info已上,additivity=false,禁止重复添加日志,因为下面有个Root是全局的,会重复-->
        <Logger name="com.example.t_log4j2.TTest" level="info" additivity="false">
            <AppenderRef ref="ConsoleAppender" />
        </Logger>
        <!--其他所有日志的级别是debug-->
        <Root level="debug">
            <AppenderRef ref="ConsoleAppender" />
        </Root>
    </Loggers>

</Configuration>

Java文件:

package com.example.t_log4j2;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TTest {

    private static final Logger logger = LogManager.getLogger(TTest.class);

    public static void main(String[] args) {
        logger.fatal(">>>{}", "fatal");
        logger.error(">>>{}", "error");
        logger.warn(">>>{}", "warn");
        logger.info(">>>{}", "info");
        logger.debug(">>>{}", "debug");
        logger.trace(">>>{}" ,"trace");
        print();
    }

    public static void print(){
        logger.info(">>>print{}", "info");
    }
}

控制台输出:

2018-09-25 11:43:59 com.example.t_log4j2.TTest.main(TTest.java:11) - >>>fatal

2018-09-25 11:43:59 com.example.t_log4j2.TTest.main(TTest.java:12) - >>>error

2018-09-25 11:43:59 com.example.t_log4j2.TTest.main(TTest.java:13) - >>>warn

2018-09-25 11:43:59 com.example.t_log4j2.TTest.main(TTest.java:14) - >>>info

2018-09-25 11:43:59 com.example.t_log4j2.TTest.print(TTest.java:21) - >>>printinfo

PatternLayout中的pattern配置参数参考:

https://logging.apache.org/log4j/2.x/manual/layouts.htmlOK,,,记录完毕! 

2、日志保存到文件 

加入配置:

<!--fileName:当前日志名
filePattern:压缩后的文件名
SizeBasedTriggeringPolicy:每当日志大小超过1K自动压缩
DefaultRolloverStrategy:最大保存日志文件个数,是int级别-->
<RollingFile name="RollingFile" fileName="C:/logs/t/app.log"
             filePattern="C:/logs/t/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}-%i.log.gz">
    <PatternLayout pattern="${LOG_PATTERN}"/>
    <Policies>
        <SizeBasedTriggeringPolicy size="1KB"/>
    </Policies>
    <DefaultRolloverStrategy max="88888888"/>
</RollingFile>

完整如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--每30秒后重新加载配置文件,因为可能配置文件改了,所以会动态加载,不错-->
<Configuration status="WARN" monitorInterval="30">
    <!--相当于变量-->
    <Properties>
        <Property name="LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss} %l - %msg%n
        </Property>
    </Properties>

    <Appenders>

        <!--控制台输入日志-->
        <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>

        <!--fileName:当前日志名
        filePattern:压缩后的文件名
        SizeBasedTriggeringPolicy:每当日志大小超过1K自动压缩
        DefaultRolloverStrategy:最大保存日志文件个数,是int级别-->
        <RollingFile name="RollingFile" fileName="C:/logs/t/app.log"
                     filePattern="C:/logs/t/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--当日志超过1KB就自动压缩成旧的日志,并创建新的日志文件,可以设置成MB-->
                <SizeBasedTriggeringPolicy size="1KB"/>
            </Policies>
            <!--最多保存日志个数-->
            <DefaultRolloverStrategy max="88888888"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!--指定TTest日志级别只能是info已上,additivity=false,禁止重复添加日志,因为下面有个Root是全局的,会重复-->
        <Logger name="com.example.t_log4j2.TTest" level="info" additivity="false">
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="RollingFile"/>
        </Logger>
        <!--其他所有日志的级别是debug-->
        <Root level="debug">
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>

</Configuration>

3、日志按级别输出到文件中

Log4j2的日志级别有:trace < debug < info < warn < error < fatal

当<Root >设置level为info时,只能看到info及以上的级别日志,也就是info\warn\error\fatal

现在想把日志文件分别按debug ,info,warn...等分开保存,也就是会得到debug.log,info.log,warn.log,那么就得用上配置:<ThresholdFilter>,ThresholdFilter有三个参数:level\onMatch\onMismatch

level:日志级别

onMatch:匹配上

onMismatch:不匹配得上

其中onMatch可选值 :ACCEPT : 接受\DENY : 拒绝\NEUTRAL : 中性\默认:NEUTRAL

其中onMismatch可选值 :ACCEPT : 接受\DENY : 拒绝\NEUTRAL : 中性\默认:DENY

假设现在想把info的信息记录在info.log文件中,那么配置如下:

<!--fileName:当前日志名
filePattern:压缩后的文件名
SizeBasedTriggeringPolicy:每当日志大小超过1K自动压缩
DefaultRolloverStrategy:最大保存日志文件个数,是int级别-->
<RollingFile name="RollingFile" fileName="C:/logs/t/info.log"
             filePattern="C:/logs/t/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}-%i.info.log.gz">
    <PatternLayout pattern="${LOG_PATTERN}"/>

    <Filters>
        <!--只记录info的,下面第一行的配置意思是只记录info级别书上的,否则不理.
        第二行的意思是warn级别上的不作记录,其他的不理,
        所以合起来的意思是:  info <= 记录的日志级别 <  warn,所以只能记录info的-->
        <Filters>
          <ThresholdFilter level="INFO"/>
          <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
        </Filters>


    </Filters>

    <Policies>
        <!--当日志超过1KB就自动压缩成旧的日志,并创建新的日志文件,可以设置成MB-->
        <SizeBasedTriggeringPolicy size="1KB"/>
    </Policies>
    <!--最多保存日志个数-->
    <DefaultRolloverStrategy max="88888888"/>
</RollingFile>

完整的:

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

<Configuration status="WARN" monitorInterval="30">

    <Properties>
        <Property name="LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss} %l - %msg%n
        </Property>
    </Properties>

    <Appenders>

        <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>

        <RollingFile name="InfoRollingFile" fileName="C:/logs/t/info.log"
                     filePattern="C:/logs/t/%d{yyyy-MM-dd}/info/%d{yyyy-MM-dd}-%i.info.log.gz">

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

            <Filters>
                <ThresholdFilter level="INFO"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>

            <Policies>
                <SizeBasedTriggeringPolicy size="1KB"/>
            </Policies>

            <DefaultRolloverStrategy max="88888888"/>
        </RollingFile>

        <RollingFile name="DebugRollingFile" fileName="C:/logs/t/debug.log"
                     filePattern="C:/logs/t/%d{yyyy-MM-dd}/debug/%d{yyyy-MM-dd}-%i.debug.log.gz">

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

            <Filters>
                <ThresholdFilter level="DEBUG"/>
                <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>

            <Policies>
                <SizeBasedTriggeringPolicy size="1KB"/>
            </Policies>

            <DefaultRolloverStrategy max="88888888"/>
        </RollingFile>

        <RollingFile name="WarnRollingFile" fileName="C:/logs/t/warn.log"
                     filePattern="C:/logs/t/%d{yyyy-MM-dd}/warn/%d{yyyy-MM-dd}-%i.warn.log.gz">

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

            <Filters>
                <ThresholdFilter level="WARN"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>

            <Policies>
                <SizeBasedTriggeringPolicy size="1KB"/>
            </Policies>

            <DefaultRolloverStrategy max="88888888"/>
        </RollingFile>

        <RollingFile name="ErrorRollingFile" fileName="C:/logs/t/error.log"
                     filePattern="C:/logs/t/%d{yyyy-MM-dd}/error/%d{yyyy-MM-dd}-%i.error.log.gz">

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

            <Filters>
                <ThresholdFilter level="ERROR"/>
                <ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>

            <Policies>
                <SizeBasedTriggeringPolicy size="1KB"/>
            </Policies>

            <DefaultRolloverStrategy max="88888888"/>
        </RollingFile>
    </Appenders>

    <Loggers>

        <Logger name="com.example.t_log4j2.TTest" level="debug" additivity="false">
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="InfoRollingFile"/>
            <AppenderRef ref="DebugRollingFile"/>
            <AppenderRef ref="WarnRollingFile"/>
            <AppenderRef ref="ErrorRollingFile"/>
        </Logger>

        <Root level="debug">
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="InfoRollingFile"/>
            <AppenderRef ref="DebugRollingFile"/>
            <AppenderRef ref="WarnRollingFile"/>
            <AppenderRef ref="ErrorRollingFile"/>
        </Root>
    </Loggers>

</Configuration>

要想把日志写在tomcat目录下,可修改log4j2.xml文件中的fileName和filePattern,加入${sys:catalina.home},如:
fileName="${sys:catalina.home}/logs/info/infoabc.log"
filePattern="${sys:catalina.home}/logs/info/%d{yyyy-MM-dd}/info/%d{yyyy-MM-dd}-%i.info.log.gz"

这里日志的位置(自己的tomcat啦):D:\apache-tomcat-8.0.53\logs

 OK,记录完毕。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值