(五)Spring Boot 日志管理——log4j框架


1、SLF4J和Logback和Log4j的关系

slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback),使用接口的好处是当项目需要更换日志框架的时候,只需要更换jar和配置,不需要更改相关java代码。

Logback和Log4j 就相当于对slf4j的实现,类似于jdbc和MySQL与Oracle的关系。
在这里插入图片描述

2、如何在spring boot中使用log4j

Spring boot其实已经默认集成了LogBack,同时也是默认开启的。但是我们都习惯性使用log4j,之前学习Spring框架也是用的log4j。

2.1、排除自带的logback

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
	<exclusions>
		<!-- 排除spring-boot-starter-web中自带的logback依赖 -->
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>

2.2、引入log4j的依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j</artifactId>
	<version>1.3.8.RELEASE</version>
</dependency>

2.3、代码示例

@RestController
public class Log4jController
{
    private static final Logger logger = LoggerFactory.getLogger(Log4jController.class);
    
    @RequestMapping("/log4jIndex")
    public String lo4jIndex()
    {
        logger.info("lo4jIndex-log4j打印日志-info");
        logger.error("lo4jIndex-log4j打印日志-error");
        return "使用log4j打印日志:" + this.getClass();
    }
}

2.4、添加配置文件log4j.properties

3、log4j配置文件

3.1、格式化符号说明

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L::输出代码中的行号。
%m::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。

3.2、配置示例

3.2.1、按大小产生日志文件备份

#按大小产生日志文件备份
log4j.rootLogger=A1,ERROR
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target = System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t]-[%c:%L]-[%-5p] %m%n

#全局过滤器 过滤低于info级别的日志
log4j.appender.ERROR.Threshold=ERROR
log4j.appender.ERROR=org.apache.log4j.RollingFileAppender
log4j.appender.ERROR.layout=org.apache.log4j.PatternLayout  
log4j.appender.ERROR.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t]-[%c:%L]-[%-5p] %m%n
log4j.appender.ERROR.MaxFileSize=10240KB
log4j.appender.ERROR.MaxBackupIndex=10
log4j.appender.ERROR.Encoding=UTF-8
log4j.appender.ERROR.File=./logs/test.log 

3.2.2、不同级别日志分别打印

log4j.rootLogger=DEBUG,R,CONSOLE,INFO,ERROR
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t]-[%c:%L]-[%-5p] %m%n

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:ss} [%t]-[%c:%L]-[%-5p] %m%n
log4j.appender.INFO.datePattern='.'yyyy-MM-dd
log4j.appender.INFO.Encoding=UTF-8
log4j.appender.INFO.Threshold=INFO
log4j.appender.INFO.append=false
log4j.appender.INFO.File=./logs/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:ss} [%t]-[%c:%L]-[%-5p] %m%n
log4j.appender.ERROR.datePattern='.'yyyy-MM-dd
log4j.appender.ERROR.Encoding=UTF-8
log4j.appender.ERROR.Threshold=ERROR
log4j.appender.ERROR.append=false
log4j.appender.ERROR.File=./logs/error.log

log4j.logger.R=R  
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t]-[%c:%L]-[%-5p] %m%n
log4j.appender.R.datePattern='.'yyyy-MM-dd
log4j.appender.R.Encoding=UTF-8
log4j.appender.R.Threshold=DEBUG
log4j.appender.R.append=false
log4j.appender.R.File=./logs/debug.log

3.2.3、每天产生一个日志文件

log4j.rootLogger=CONSOLE,INFO
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t]-[%c:%L]-[%-5p] %m%n

log4j.appender.ERROR.Threshold =INFO
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:ss} [%t]-[%c:%L]-[%-5p] %m%n
log4j.appender.ERROR.datePattern='.'yyyy-MM-dd
log4j.appender.ERROR.Encoding=UTF-8
log4j.appender.ERROR.append=false
log4j.appender.ERROR.File=./logs/info1.log

4、代码地址

spring-boot2-log4j

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值