首页 > 其他分享 >spring boot 2.x 配置log4j2

spring boot 2.x 配置log4j2

时间:2023-03-09 15:12:03浏览次数:39  
标签:log spring boot HH HOME log4j2 LOG

1 配置pom.xml

如果依赖中包含了spring-boot-starter加入以下代码

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions> <!-- 去掉springboot自带的日志 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

如果依赖中包含spring-boot-starter-web加入以下代码

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions><!-- 去掉springboot自带的日志 -->
        <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>

2 清除之前的依赖

 

 3 maven重新加载依赖

  

  

   4 更改配置文件

    application.properties

    logging.config=classpath:log4j2.xml

   5 配置 log4j2.xml

    

<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30"> <!-- 配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹 -->
<properties>
<property name="LOG_HOME">F:/logs/sys</property>
</properties>
<!--先定义所有的appender-->
<appenders> <!-- 优先级从高到低分别是 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL -->
<!-- 单词解释: Match:匹配 DENY:拒绝 Mismatch:不匹配 ACCEPT:接受 -->
<!-- DENY,日志将立即被抛弃不再经过其他过滤器; NEUTRAL,有序列表里的下个过滤器过接着处理日志; ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
<!--输出日志的格式 %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 %p : 日志输出格式 %c : logger的名称 %m : 日志内容,即 logger.info("message") %n : 换行符 %C : Java类名 %L : 日志输出所在行数 %M : 日志输出所在方法名 hostName : 本地机器名 hostAddress : 本地ip地址 -->
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{1.} - %m%n"/>
<!--<PatternLayout pattern="[%d{HH:mm:ss:SSS}] - (%F:%l) - %m%n"/>-->
<!--<PatternLayout pattern="[%d{HH:mm:ss:SSS}] (%F:%L) %m%n" />-->
</console>
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<!-- TRACE级别日志 ; 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内, 日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出trace级别的数据到trace.log -->

<RollingFile name="RollingFileTrace" immediateFlush="true" fileName="${LOG_HOME}/trace.log"
filePattern="${LOG_HOME}/trace_%d{yyyy-MM-dd-HH}-%i.log.zip">
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>

<PatternLayout pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>

<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>

<SizeBasedTriggeringPolicy size="10 MB"/>

</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20">
<!--这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用 另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->

<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="trace_*.zip"/>
<!-- 保存时间与filePattern相同即可 -->
<!-- 如果filePattern为:yyyy-MM-dd-HH:mm:ss, age也可以为5s,表示日志存活时间为5s -->
<IfLastModified age="168H"/>

</Delete>

</DefaultRolloverStrategy>

</RollingFile>

<RollingFile name="RollingFileDebug" immediateFlush="true" fileName="${LOG_HOME}/debug.log"
filePattern="${LOG_HOME}/debug_%d{yyyy-MM-dd-HH}-%i.log.zip">
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>

<PatternLayout pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>

<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>

<SizeBasedTriggeringPolicy size="10 MB"/>

</Policies>

<DefaultRolloverStrategy max="20">
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="debug_*.zip"/>

<IfLastModified age="168H"/>

</Delete>

</DefaultRolloverStrategy>

</RollingFile> <!-- info日志配置 -->
<RollingFile name="RollingFileInfo" immediateFlush="true"
fileName="${LOG_HOME}/info.log"
filePattern="${LOG_HOME}/info_%d{yyyy-MM-dd-HH}-%i.log.zip"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter
level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout
pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>

<SizeBasedTriggeringPolicy size="10 MB"/>

</Policies>
<DefaultRolloverStrategy max="20">
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="info_*.zip"/>

<IfLastModified age="168H"/>

</Delete>

</DefaultRolloverStrategy>
</RollingFile> <!-- warn日志配置 -->
<RollingFile name="RollingFileWarn"
immediateFlush="true"
fileName="${LOG_HOME}/warn.log" filePattern="${LOG_HOME}/warn_%d{yyyy-MM-dd-HH}-%i.log.zip">
<ThresholdFilter
level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout
pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>

<SizeBasedTriggeringPolicy size="10 MB"/>

</Policies>
<DefaultRolloverStrategy max="20">
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="warn_*.zip"/>

<IfLastModified age="168H"/>

</Delete>

</DefaultRolloverStrategy>
</RollingFile> <!-- error日志配置 -->
<RollingFile
name="RollingFileError" immediateFlush="true"
fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error_%d{yyyy-MM-dd-HH}-%i.log.zip">
<ThresholdFilter
level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout
pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>

<SizeBasedTriggeringPolicy size="10 MB"/>

</Policies>
<DefaultRolloverStrategy max="20">
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="error_*.zip"/>

<IfLastModified age="168H"/>

</Delete>

</DefaultRolloverStrategy>
</RollingFile>
</appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>

<logger name="org.mybatis" level="INFO"/>

<root level="all">
<appender-ref ref="Console"/>

<appender-ref ref="RollingFileDebug"/>

<appender-ref ref="RollingFileTrace"/>

<appender-ref ref="RollingFileInfo"/>

<appender-ref ref="RollingFileWarn"/>

<appender-ref ref="RollingFileError"/>

</root>

</loggers>
</configuration>

 

 

   6 重启服务器

     特别提醒,当我们在pom文件有清除某个依赖或某个子包时一定要先在maven中clean之前加载的依赖,然后再重新导入

标签:log,spring,boot,HH,HOME,log4j2,LOG
From: https://www.cnblogs.com/jackspider/p/17198477.html

相关文章

  • 一Spring框架基础--2设计模式
    一Spring框架基础--2设计模式1.3spring用到的设计模式1.3.1责任链模式有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象......
  • 一Spring框架基础--3动态代理
    一Spring框架基础--3动态代理1.4代理模式1.4.1Java代码执行流程1.4.1.1class文件Java编译器编译好Java文件后,产生.class文件在磁盘,该文件是二进制文件,内容只有jvm......
  • Spring Boot&Vue3 前后端分离 实战 wiki 知识库系统<四>--前后端交互整合
    接着上一次​​SpringBoot&Vue3前后端分离实战wiki知识库系统<三>--VueCLI项目搭建目搭建​​的继续往下学习,这次的目标就是前后端进行功能的联调了。集成HTTP库Axio......
  • Spring Boot + Vue3 前后端分离 实战 wiki 知识库系统<四>--前后端交互整合
    接着上一次https://www.cnblogs.com/webor2006/p/17158238.html的继续往下学习,这次的目标就是前后端进行功能的联调了。集成HTTP库Axios:简述:对于Vue前端来说,需要发起后......
  • SpringBoot框架
    SpringBoot框架https://blog.csdn.net/friggly/article/details/123888590?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7......
  • spring项目dubbo升级版本
    在pom文件中找到dubbo的坐标修改你要升级的版本坐标,然后刷新<!--dubbo--><dependency><groupId>com.alibaba</groupId><art......
  • 随堂笔记14-spring之事务
    @EnableTransactionManagement工作原理:开启事务本质就是增加一个advisor,而使用@EnableTranscationManagement是向spring容器内添加俩个beanautoproxyRegisterproxyT......
  • 随堂笔记13-spring之aop底层源码
    动态代理:代理模式:为其他对象提供一种代理来控制对这个对象的访问,增强一个类中的某个方法,对其进行扩展调用分为俩类,一类是jdk的接口代理,需要有接口,另一种是cglib代......
  • Spring设计模式——原型模式
    原型模式原型模式(PrototypePattern),是指原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式主要适用于以下场景:类初始化消耗资源较多使用new生......
  • Spring设计模式——单例模式
    单例模式单例模式(SingletonPattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。饿汉单例模式饿汉单例模式在类的......