Springboot集成log4j

        log4j在项目中应该是使用的最多的日志框架了,一直没有好好去深入总结下,这篇文章记录下一些常规的用法;

1.集成

引入依赖,如下所示:

    <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<!-- 排除自带的logback依赖 -->
				<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-log4j</artifactId>
			<version>1.3.8.RELEASE</version>
		</dependency>

之后引入log4j的配置文件,log4j的配置有两种格式,一种是property这种方式,还有一种是yml的方式,这里以property配置方式,在resources目录中创建一个log4j.properties:

#定义根节点
log4j.rootLogger=info,error,CONSOLE,info

#设置控制台打印
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender     
#设置为格式化打印 PatternLayout
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout     
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n    


#设置info级别的日志
#log4j.logger.info=info
#输出到日志文件
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout     
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
#日期文件名格式化
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info   
#是否追加
log4j.appender.info.append=true
#文件存放位置
log4j.appender.info.File=E:/dance/demo/log/info.log

#log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout     
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = error
log4j.appender.error.append=true
log4j.appender.error.File=E:/dance/demo/log/error.log

#log4j.logger.DEBUG=DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout     
log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
log4j.appender.DEBUG.Threshold = DEBUG   
log4j.appender.DEBUG.append=true
log4j.appender.DEBUG.File=E:/dance/demo/log/dubug.log

接着需要在resouce的application.properties中设置log4j的路径如下:

logging.config= classpath:log4j.properties

项目的目录结构如下所示:

之后我们来测试一下打印日志,我们在启动类中添加一个日志

@SpringBootApplication
public class DemoApplication {
	private static final Logger logger = Logger.getLogger(DemoApplication.class);
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
		logger.info("DemoApplication start!!!");
	}
}

 运行项目,执行之后,在控制台上会有一些日志

 同时在项目目录中有两个文件,error.log和info.log,其中info.log中有跟上面一样的内容;

error.log是空的,是因为我们上面打印的日志级别是info,如果改成error就可以输出了;

2.说明

通过上面的步骤,我们可以在我们的Springboot项目中集成log4j了;下面针对log4j的配置做一点说明:

1>log4j的配置整体有几部分组成:日志的名称,级别以及该日志的appender(可以理解为日志输出到哪里);

2>比如这个配置log4j.rootLogger=info,error,CONSOLE,info ,rootLogger是跟日志名称,这个是默认的,info是跟日志级别,某个类没有明确指定的话,小于这个级别的日志都不会输出;后面的几个参数是指的日志输出的appender的名称,这个appender的配置是在下面指定的;所以这一行的意思:项目的跟日志级别是info,小于这个级别的日志不会输出;大于等于这个级别的日志输入的位置根据error,console,info这几个appender来配置;

3>appender的配置,常用的有ConsoleAppender:输出到控制台,DailyRollingFileAppender:每天输出一个日志文件等;上面的日志和appender名称可能会有混淆,error,info等,比如你也可以自己定义一个日志名字,aaa,也可以自己定义一个appender:aaa;配置如下所示,所以,appender后面的这个就是appender的名称;

log4j.logger.aaa=error,aaa
log4j.appender.aaa=org.apache.log4j.DailyRollingFileAppender
log4j.appender.aaa.layout=org.apache.log4j.PatternLayout     
log4j.appender.aaa.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.aaa.datePattern='.'yyyy-MM-dd
log4j.appender.aaa.Threshold = info
log4j.appender.aaa.append=true
log4j.additivity.aaa= false  
log4j.appender.aaa.File=E:/dance/demo/log/aaa.log

配置之后,我们可以在rootLogger中添加一个appender,log4j.rootLogger=info,error,CONSOLE,info,aaa 这样info级别的日志也是会输出到aaa中的;

我们打印日志的时候,

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

这句话getLogger的参数是日志的名称,这里换成aaa的话,这句日志就会只输出到aaa的日志配置中去;

log4j.appender.aaa.Threshold = info,这句话是说,aaa这个日志,最低的日志等级是info,如果设置成log4j.appender.aaa.Threshold = debug,那么当你

private static final Logger logger = Logger.getLogger("aaa");

logger.debug("DemoApplication start!!!");

来打印日志的话,这个日志是会覆盖跟日志级别的,因为明确指定了aaa,所以依然会打印的;

4>日志的名称和日志的appender之间是没有关联的,我们可以把aaa的日志也输出到error这个appender里面,我们也可以再定义一个bbb的appender,把日志名称为aaa的日志,统一输出到bbb的appender里面;下面这句的意思是,日志名称为aaa的日志,级别是error,输出到aaa和bbb这两个appender里面;注意这里的日志级别和Threshold取交集;

log4j.logger.aaa=error,aaa,bbb

3.MDC

        MDC(Mapped Diagnostic Context,映射调试上下文),主要是为了方便在多线程下打印日志使用的,我们的web都是多线程的,那么在高并发下接受用户请求的时候,可能在入口处同时打印多个用户的请求参数,我们无法确认后续的请求是哪个用户的,这种时候,可以在MDC中放入用户的标示,在日志中设置好格式打印出来,还有一种情况,子线程会继承父线程的MDC中的信息;

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Spring Boot集成Log4j2可以通过以下步骤实现: 1. 在pom.xml文件中添加Log4j2依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 2. 在src/main/resources目录下创建log4j2.xml文件,并配置日志输出格式、级别等信息。例如: ``` <?xml version="1." encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> ``` 3. 在Spring Boot应用程序中使用Log4j2进行日志记录。例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class HelloController { private static final Logger logger = LoggerFactory.getLogger(HelloController.class); @GetMapping("/hello") public String hello() { logger.info("Hello, World!"); return "Hello, World!"; } } ``` 以上就是Spring Boot集成Log4j2的简单步骤。 ### 回答2: Spring Boot集成Log4j2非常简单。首先,我们需要在项目的pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-spring-boot-starter</artifactId> <version>2.17.1</version> </dependency> ``` 在添加了这些依赖项后,我们需要在src/main/resources目录下创建一个log4j2.xml文件,用于配置Log4j2的日志输出。 ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration> ``` 此配置将日志输出到控制台,并包含时间戳、线程信息、日志级别、日志类名和消息。 最后,在Spring Boot的主类上添加`@EnableAutoConfiguration`注解,启用自动配置。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableAutoConfiguration @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 现在,当您运行Spring Boot应用程序时,您将看到日志输出到控制台。您可以将log4j2.xml中的配置根据您的需求进行修改,例如将日志输出到文件或其他地方。 希望以上解答对您有帮助! ### 回答3: Spring Boot集成Log4j2可以通过以下几个步骤完成: 1. 引入依赖:在项目的pom.xml文件中,添加Log4j2的依赖。可以通过以下方式添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 2. 配置Log4j2:在项目的resources目录下,创建一个名为log4j2.xml的文件,并配置Log4j2的相关选项。可以参考Log4j2的官方文档进行配置。 3. 在Spring Boot应用中使用Log4j2:在需要记录日志的类中,引入Log4j2的Logger类,并使用Logger进行日志记录。例如: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; ... public class MyService { private static final Logger logger = LogManager.getLogger(MyService.class); public void doSomething() { logger.info("Doing something..."); } } ``` 这样,当调用MyService类的doSomething方法时,日志会被记录下来,根据log4j2.xml中的配置,可以将日志输出到指定的地方,如控制台、文件等。 完成以上步骤后,Spring Boot就成功集成Log4j2,并可以开始使用Log4j2记录日志了。通过Log4j2,我们可以更方便地管理和配置日志,以及对日志进行更灵活的输出控制。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值