首页 > 其他分享 >springboot集成log4j2日志

springboot集成log4j2日志

时间:2023-08-12 17:44:23浏览次数:42  
标签:logging springboot spring boot https org 日志 log4j2

目录

Maven依赖

参考:
https://docs.spring.io/spring-boot/docs/2.7.14/reference/htmlsingle/#howto.logging.log4j

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<exclusions>
				<!-- 排除springboot默认的logback
				 从spring-boot-starter中排除, 而不是spring-boot-starter-xxx,避免要排除多次 -->
				<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-web</artifactId>
		</dependency>

		<!-- 引入log4j2依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>

log4j2.xml配置注释

<?xml version="1.0" encoding="UTF-8"?>
<!--      Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,
     当设置成trace时,可以看到log4j2内部各种详细输出
-->
<!-- monitorInterval:自动检测配置文件是否修改和并重新加载,单位:秒,最低5s, 注意:在编译器环境下需要修改 target/classes 目录下的文件才有效果, 而不是src/main/resources-->
<Configuration status="info" monitorInterval="5">
	<!-- 日志级别以及优先级排序: 低 ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 高 -->

	<!-- 变量配置 -->
	<Properties>
		<!--
			格式化输出:
			%date{yyyy-MM-dd HH:mm:ss.SSS}: 简写为%d 日期 2023-08-12 15:04:30,123
			%thread: %t 线程名, main
			%-5level:%p 日志级别,从左往右至少显示5个字符宽度,不足补空格 INFO
			%msg:%m 日志消息 info msg
			%n: 换行符
			{cyan}: 蓝绿色(青色)
			%logger{36}: %c 表示 Logger 名字最长36个字符
			%C: 类路径 com.qq.demolog4j2.TestLog4j2
			%M: 方法名 main
			%F: 类名 TestLog4j2.java
			%L: 行号 12
			%l: 日志位置, 相当于 %C.%M(%F.%L)  com.qq.demolog4j2.TestLog4j2.main(TestLog4j2.java:16)
		-->
		<property name="NORMAL_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level} [%thread] %style{%logger{72}}{cyan} : %msg%n" />
		<property name="SIMPLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %highlight{%-5p} [%t] %style{%l}{cyan} : %m%n" />

		<property name="baseDir" value="./logs" />
		<property name="FILE_NAME_IP" value="192.168.10.20" />
	</Properties>

	<Appenders>
		<console name="Console" target="SYSTEM_OUT">
			<!--输出日志的格式-->
			<PatternLayout pattern="${SIMPLE_PATTERN}" disableAnsi="false" noConsoleNoAnsi="false"/>
			<!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
			<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
		</console>

		<!--
		  这个会打印出所有的info及以上级别的信息,达到滚动条件后,日志会自动按filePattern格式保存并压缩,日期精确到分钟
		基于文件大小和时间的滚动策略
		-->
		<RollingFile name="RollingFileInfo" fileName="${baseDir}/info.log"
		             filePattern="${baseDir}/$${date:yyyy-MM}/${FILE_NAME_IP}-INFO-%d{yyyy-MM-dd-HH-mm}_%i.log.gz">
			<!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
			<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="${SIMPLE_PATTERN}"/>
			<Policies>
				<!-- 满足任意条件就开始滚动 -->
				<!--interval属性用来指定多久滚动一次,默认是1, 单位根据filePattern中日期的最小单位来-->
				<TimeBasedTriggeringPolicy interval="1"/>
				<!-- 日志超过20MB就滚动 -->
				<SizeBasedTriggeringPolicy size="20KB"/>
			</Policies>
			<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖 -->
			<DefaultRolloverStrategy max="5"/>
		</RollingFile>

		<!-- 这个会打印出所有的warn及以上级别的信息,filePattern的日期精确到小时
		基于文件大小的策略-->
		<RollingFile name="RollingFileWarn" fileName="${baseDir}/warn.log"
		             filePattern="${baseDir}/${FILE_NAME_IP}-WARN-%d{yyyy-MM-dd-HH}.log.gz">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
			<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="${NORMAL_PATTERN}"/>
			<Policies>
				<SizeBasedTriggeringPolicy size="20MB"/>
			</Policies>
			<DefaultRolloverStrategy max="15"/>
		</RollingFile>

		<!-- 这个会打印出所有的error及以上级别的信息,filePattern的日期精确到天
		 基于时间间隔的策略-->
		<RollingFile name="RollingFileError" fileName="${baseDir}/error.log"
		             filePattern="${baseDir}/${FILE_NAME_IP}-ERROR-%d{yyyy-MM-dd}.log">
			<!--控制台只输出error及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
			<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="${NORMAL_PATTERN}"/>
			<Policies>
				<TimeBasedTriggeringPolicy interval="1"/>
			</Policies>
			<DefaultRolloverStrategy>
				<!-- 日志只保留7d,超过自动删除 -->
				<Delete basePath="${baseDir}" maxDepth="1">
					<IfFileName glob="*-ERROR-*.log" />
					<!-- age支持 PnDTnHnMnS 格式,
					参考 org.apache.logging.log4j.core.appender.rolling.action.Duration.parse()方法的注释 -->
					<IfLastModified age="7d" />
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>
	</Appenders>

	<!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
	<!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
	<Loggers>
		<!--过滤掉spring和mybatis中的DEBUG信息-->
		<Logger name="org.mybatis" level="info" additivity="false">
			<AppenderRef ref="Console"/>
		</Logger>
		<!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
		<Logger name="org.springframework" level="info" additivity="false">
			<AppenderRef ref="Console"/>
		</Logger>

		<Root level="debug">
			<!-- 配置了多个appender,就会输出到多个appender中,即同一条日志会在打印多次 -->
			<appender-ref ref="Console"/>
			<appender-ref ref="RollingFileInfo"/>
			<appender-ref ref="RollingFileWarn"/>
			<appender-ref ref="RollingFileError"/>
		</Root>
	</Loggers>
</Configuration>

测试

@RestController
@Log4j2
public class TestController {

	@RequestMapping("/test")
	public String test() {
		new Thread(() -> {
			while (true) {
				log4j2();
				try {
					Thread.sleep(200L);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}).start();
		return "done";
	}

	private void log4j2() {
		log.trace("trace msg");
		log.debug("debug msg");
		log.info("info msg");
		log.warn("warn msg");
		log.error("error msg");
		log.fatal("fatal msg");
	}
}

参考

引入log4j2依赖
https://docs.spring.io/spring-boot/docs/2.7.14/reference/htmlsingle/#howto.logging.log4j

自动重新配置 monitorInterval
https://logging.apache.org/log4j/2.x/manual/configuration.html#automatic-reconfiguration

Appenders
https://logging.apache.org/log4j/2.x/manual/appenders.html

自动配置 文件加载顺序
https://logging.apache.org/log4j/2.x/manual/configuration.html#automatic-configuration

pattern-layout
https://logging.apache.org/log4j/2.x/manual/layouts.html#pattern-layout

SpringBoot整合log4j2进行日志配置及防坑指南
https://www.cnblogs.com/cndarren/p/12021596.html

SpringBoot—整合log4j2入门和log4j2.xml配置详解
https://www.cnblogs.com/exmyth/p/15355504.html

标签:logging,springboot,spring,boot,https,org,日志,log4j2
From: https://www.cnblogs.com/qode/p/17625159.html

相关文章

  • WEB自动化-Allure报告-添加日志内容到Allure报告
    如果想把LOG内容输出到Allure报告,步骤如下:1、创建pytest.ini文件,设置规则 2、创建conftest文件,设置driver和日志封装及截图#浏览器驱动importloggingimportallureimportpytestfromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOpti......
  • Springboot - 员工部门案例
    目录查询全部部门信息查询全部部门信息//知识点1:@RequestMapping(value="/list",method=RequestMethod.GET)等价于:@GetMapping("/list")//知识点2:privatestaticLoggerlogger=LoggerFactory.getLogger(DeptController.class);等价于@Slf4j(lombok.extern.slf......
  • SpringBoot3数据库集成
    标签:Jdbc.Druid.Mybatis.Plus;一、简介项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富;通过如下几个组件来实现数据库的整合;Druid连接池:阿里开源的数据库连接池,并且提供SQL执行的监控能力;MybatisPlus框架:基于Mybatis框......
  • SpringBoot3数据库集成
    标签:Jdbc.Druid.Mybatis.Plus;一、简介项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富;通过如下几个组件来实现数据库的整合;Druid连接池:阿里开源的数据库连接池,并且提供SQL执行的监控能力;MybatisPlus框架:基于Mybatis......
  • springboot项目创建即运行
    springboot项目创建这是相关依赖项目如果用到Mybatis和数据库MySQL需要勾选在springboot项目中企业级最终是使用result设计模式返回数据,就是创建一个result类用于接管要返回的各种数据result类的代码publicclassResult{privateintcode;privateStringmes;......
  • SpringBoot跨域
    SpringBooot2.5.12packagecom.lenovo.lps.cost.servicecto.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.http.client.SimpleClientHttpRequestFactory;imp......
  • SpringBoot BigDecimal精度丢失
    jackjson自动丢弃了小数位最末尾的0privateBigDecimalprice;price=12.10;返回自动转为了12.1解决方案1:返回字段都用字符串2:BigDecimal序列化自定义处理packagecom.lenovo.lps.cost.integrator.config;importcom.fasterxml.jackson.core.JsonGenerat......
  • SpringBoot复习:(21)自定义ImportBeanDefinitionRegistrar
    要达到的目的:将某个包下使用了某个自定义注解(比如@MyClassMapper)的类注册到Spring容器。一、自定义注解:packagecom.example.demo.service;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)publ......
  • SpringBoot复习:(20)如何把bean手动注册到容器?
    可以通过实现BeanDefinitionRegistryPostProcessor接口,它的父接口是BeanFactoryPostProcessor.步骤:一、自定义一个组件类:packagecom.example.demo.service;publicclassMusicService{publicMusicService(){System.out.println("musicserviceconstructed!......
  • SpringBoot复习:(19)Condition接口和@Conditional注解
    Condition接口代码如下:publicinterfaceCondition{ booleanmatches(ConditionContextcontext,AnnotatedTypeMetadatametadata);}它是一个函数式接口,只有一个方法matches用来表示条件是否满足。matches方法中的ConditionContext类对象context可以通过getEnvironment方法获......