集成log4j相关配置

1.log4j使用

1.1.log4j pom

1
2
3
4
5
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

1.2.配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
log4j.rootLogger = debug,stdout,D

# log4j.rootLogger = [ level ] , appenderName, appenderName,-
# 其中,level 是日志记录的优先级,分为0FF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4建议只使用四级别,
# 优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
# 比如INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
# appenderName就是指定日志信息输出到哪个地方。你可以同时指定多个输出目的地。

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%%m%n

# appender 类型
# org.apache.log4j.ConsoleAppender (控制台)
# org.apache.log4j.FileAppender (文件),
# org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),
# org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
# org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)

log4j.appender.D = org.apache.log4j.FileAppender
log4j.appender.D.File = D:/logs/error.log4j
log4j.appender.D.Append = true
log4j.appender.D.Threshold = warn
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

  • (1) ConsoleAppender 选项

​ Thresho1d=WARN:指定日志消息的输出最低层次。

​ ImmediateFlush=true:默认值是true,意味着着所有的消息都会被立即输出

​ Target=System.err: 默认情况下是:System.out,指定输出控制台

  • (2) FileAppender 选项

​ Threshold=WARN:指定日志消息的输出最低层次

​ ImmediateFlush=true:默认值是true,意味着所有的消息都会被立即输出。

​ File=mylog.txt:指定消息输出到mylog.txt文件。

​ Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容

  • (3) DailyRollingFileAppender 选项
    Threshold=WARN:指定日志消息的输出最低层次
    lmmediateFlush=true:默认值是true,意味着所有的消息都会被立即输出。
    File=mylog.txt:指定消息输出到mylog.txt文件。
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容DatePattern=’yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下
    1)yyyy-MM:每月
    2)yyyy-ww:每周
    3)yyyy-MM-dd:每天
    4)yyyy-MM-dd-a:每天两次
    5)yyyy-MM-dd-HH:每小时
    6)yyyy-MM-dd-HH-mm:每分钟

  • (4)RollingFileAppender 选项
    Threshold=WARN:指定日志消息的输出最低层次
    lmmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
    File=mylog.txt:指定消息输出到mylog.txt文件
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

​ MaxFileSize=100KB:后缀可以是KB,MB 或者是 GB.在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1

​ MaxBackuplndex=2:指定可以产生的滚动文件的最大数。

布局格式

​ log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

​ log4j.appender.appenderName.1ayout.option1 = vauel

​ log4j.appender.appenderName. ayout.option = valueN其中,Log4j提供的1ayout有以下几种:
​ org.apache.log4j.HTMLLayout(以HTML表格形式布局),

​ org.apache.log4j.PatternLayout (可以灵活地指定布局模式),

​ org.apache.log4j.simpleLayout (包含日志信息的级别和信息字符串)

​ org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)

2.log4j2+springboot

2.1.集成配置

​ 这个可能配置起来比较麻烦,因为springboot默认使用 Logback 和 SLF4J 作为其日志系统,再更改为log4j需要排除且禁用默认的日志框架,需要修改pom文件,和yml配置。

2.1.1.pom依赖配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<exclusions>
<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>
<!-- Spring Boot Starter Web,排除默认的日志依赖 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>


<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.14.1</version>
</dependency>

<!-- Log4j2 的 API -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>

<!-- Log4j2 的 Core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>

<!-- Log4j2 的 Spring Boot Starter,提供 Spring Boot 对 Log4j2 的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>

2.1.2.application.yml

1
2
3
4
5
6
7
8
spring:
main:
log-startup-info: false
logging:
level:
root: OFF
org.springframework: OFF

2.2.日志测试主类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.gaomu.vulner;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Test {
private static Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
//LogManager.ROOT_LOGGER_NAME 记录所有日志
//Test.class,只记录Test类的日志
public static void main(String[] args) {
logger.trace("log4j2日志输出, This is trace message");
System.out.println("-0----------------");
logger.fatal("fatal信息");
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
//默认是info级别的打印
logger.debug("debug信息");
logger.trace("trace信息");

}
}