概述
- log4j2 支持同步日志和异步日志 , 性能优于log4j 和logback .
- log4j2 支持配置方式: xml , json , yaml, properties
自动发现配置文件(Automatic Configuration) , 目录在classpath下: maven目录 (src -> main -> resources)
,文件发现顺序:
log4j2-test.properties
log4j2-test.yaml
log4j2-test.yml
log4j2-test.json
log4j2-test.jsn
log4j2-test.xml
log4j2.properties
log4j2.yaml
log4j2.yml
log4j2.json
log4j2.jsn
log4j2.xml
如果没有配置文件 , log4j2 默认配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
- Appenders配置参考:
- patternlayout 配置参考: Log4j输出格式控制--log4j的PatternLayout参数含义以及详细配置
最好的文档 ,还是在官网
使用log4j2.yml
Configuration:
status: WARN
Appenders:
#配置控制台输出的格式
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
#%d日期 %t线程 %-5level五个字符的日志输出级别 %logger日志发生的位置 %m日志内容 %n换行
pattern: %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
Loggers:
Root:
#总输出级别 error , 输出到控制台
level: ERROR
AppenderRef:
ref: Console
Logger:
#org.kotcloud路径下的日志输出级别为DEBUG, additivity(默认true)=false不重复输出
name: org.kotcloud
level: DEBUG
additivity: false
不要配置DTD文件
配置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,会引入slf4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- web项目 , 引入log4j-web -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- 使用log4j2.yml格式的配置文件,必须加这个依赖,用于识别.yml -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
在Web应用程序中使用Log4j 2 在Java EE Web应用程序中使用Log4j或任何其他日志框架时,您必须特别小心。当容器关闭或Web应用程序被取消部署时,对日志>资源进行适当清理(数据库连接关闭,文件关闭等)非常重要。由于Web应用程序中类加载器的性质,Log4j资源无法通过正常方式清理。当Web应用程序部署时必须“启动”Log4j,并在Web应用程序未使用时“关闭”。它的工作方式取决于您的应用程序是Servlet 3.0还是更新版本或 Servlet 2.5 Web应用程序。
无论哪种情况,您都需要将log4j-web模块添加到您的部署中,详见 Maven,Ivy和Gradle Artifacts手册页。
为了避免问题,当包含log4j-web jar时,Log4j关闭钩子将自动被禁用。
使用log4j2,slf4j
@RestController
open class IndexController{
val log : Logger = LoggerFactory.getLogger(IndexController::class.java)
@RequestMapping("/index")
fun index(id:String="") : String{
log.info("id:{}",id)
return id
}
}
完成后启动服务 , 请求接口: http://localhost:8080/index?id=123456
输出 :
2018-04-09 12:33:34.640 [http-nio-80-exec-3] INFO org.kotcloud.controller.IndexController - id:123456
日志配置成功!
多环境配置日志:
springBoot可以使用多环境的属性配置文件 , 那么在多环境的属性配置文件中指定日志文件 ,就可以区分环境了.
新增以下文件:
- log4j2-dev.yml
- log4j2-test.yml
- log4j2-pro.yml
在属性配置文件(application-{profile}.yml)中配置不同环境的日志 application-dev.yml
logging:
config: classpath:log4j2-dev.yml
log4j2-dev.yml , 开发环境希望输出更多的日志, 可以把日志级别尽量调到最低 , 且只输出到控制台
Configuration:
status: WARN
Appenders:
#配置控制台输出的格式
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
#%d日期 %t线程 %5p五个字符的日志输出级别 %l日志发生的位置 %m日志内容 %n换行
pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %t %l - %m%n"
Loggers:
Root:
#总输出级别 DEBUG, 输出到控制台
level: DEBUG
AppenderRef:
ref: Console
Logger:
#org.kotcloud路径下的日志输出级别为trace, additivity(默认true)=false不重复输出
name: org.kotcloud
level: TRACE
additivity: false
AppenderRef:
ref: Console
log4j2-test.yml ,测试环境日志,输出日志到文件,不切分日志.
Configuration:
status: WARN
Properties:
Property:
name: pattern
#%d日期 %t线程 %5p五个字符的日志输出级别 %l日志发生的位置 %m日志内容 %n换行
value: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %t %l - %m%n"
Appenders:
#配置控制台输出的格式
File:
#输出到项目根路径下的 logs/out.log文件
name: fileLog
fileName: logs/out.log
PatternLayout:
pattern: ${pattern}
Loggers:
Root:
#总输出级别 error , 输出到控制台
level: ERROR
AppenderRef:
ref: fileLog
Logger:
#org.kotcloud路径下的日志输出级别为trace, additivity(默认true)=false不重复输出
name: org.kotcloud
level: DEBUG
additivity: false
AppenderRef:
ref: fileLog
log4j2-pro.yml 生产日志输出到文件 , 并日志量达到一定量切分日志