【log4j 2.x】【log4j日志升级漏洞修复】log4j2日志 [简单明了][一眼就会]
大多同学说的不是很全,写的不是很具体。
在此,本人出一篇简单明了的详细教程:
目录:
1、加载log4j 2包
2、配置xml文件
3、写测试并运行
4、log指定文件:自动打印info、error日志
5、整体code
正文:
1、加载log4j 2包
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.18.0</version>
</dependency>
2、配置xml文件:log4j2.xml
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | <?xml version= "1.0" encoding= "UTF-8" ?> <!-- status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出 monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。此处表示每隔 600 秒重读一次配置文件 --> <Configuration status= "OFF" monitorInterval= "600" > <!--日志级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL--> <!--如果设置为WARN,则低于WARN的信息都不会输出--> <Properties> <!-- 配置日志文件输出目录,此处为项目根目录下的logs文件夹 --> <Property name= "LOG_HOME" >logs</Property> <property name= "FILE_NAME" >you_Project</property> </Properties> <Appenders> <!--这个输出控制台的配置--> <Console name= "Console" target= "SYSTEM_OUT" > <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level= "ERROR" onMatch= "ACCEPT" onMismatch= "DENY" /> <!--日志输出的格式--> <!-- %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间 %-5level : 输出日志级别,- 5 表示左对齐并且固定输出 5 个字符,如果不足在右边补 0 %c : logger的名称(%logger) %t : 输出当前线程名称 %p : 日志输出格式 %m : 日志内容,即 logger.info( "message" ) %n : 换行符 %C : Java类名(%F) %L : 行号 %M : 方法名 %l : 输出语句所在的行数, 包括类名、方法名、文件名、行数 hostName : 本地机器名 hostAddress : 本地ip地址 --> <PatternLayout pattern= "%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <!-- 循环日志文件:日志文件大于阀值的时候,就开始写一个新的日志文件 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 fileName : 指定当前日志文件的位置和文件名称 filePattern : 指定当发生Rolling时,文件的转移和重命名规则 SizeBasedTriggeringPolicy : 指定当文件体积大于size指定的值时,触发Rolling DefaultRolloverStrategy : 指定最多保存的文件个数 TimeBasedTriggeringPolicy : 这个配置需要和filePattern结合使用 注意filePattern中配置的文件重命名规则是${FILE_NAME}_%d{yyyy-MM-dd}_%i,最小的时间粒度是dd,即天, TimeBasedTriggeringPolicy指定的size是 1 ,结合起来就是每 1 天生成一个新文件 --> <RollingRandomAccessFile name= "INFO" fileName= "logs/${FILE_NAME}.log" filePattern= "log/${FILE_NAME}_%d{yyyy-MM-dd}_%i.log.gz" > <Filters> <ThresholdFilter level= "WARN" onMatch= "DENY" onMismatch= "NEUTRAL" /> <ThresholdFilter level= "TRACE" onMatch= "ACCEPT" onMismatch= "DENY" /> </Filters> <PatternLayout pattern= "%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy interval= "1" /> <SizeBasedTriggeringPolicy size= "1MB" /> </Policies> <DefaultRolloverStrategy max= "20" /> </RollingRandomAccessFile> <!--错误信息记录--> <RollingRandomAccessFile name= "ERROR" fileName= "logs/${FILE_NAME}-ERROR.log" filePattern= "log/${FILE_NAME}-ERROR_%d{yyyy-MM-dd}_%i.log.gz" > <Filters> <ThresholdFilter level= "FATAL" onMatch= "DENY" onMismatch= "NEUTRAL" /> <ThresholdFilter level= "WARN" onMatch= "ACCEPT" onMismatch= "DENY" /> </Filters> <PatternLayout pattern= "%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy interval= "1" /> <SizeBasedTriggeringPolicy size= "1MB" /> </Policies> <DefaultRolloverStrategy max= "20" /> </RollingRandomAccessFile> <!--系统级别的错误信息--> <RollingRandomAccessFile name= "FATAL" fileName= "logs/${FILE_NAME}-FATAL.log" filePattern= "log/${FILE_NAME}-FATAL%d{yyyy-MM-dd}_%i.log.gz" > <Filters> <ThresholdFilter level= "FATAL" onMatch= "ACCEPT" onMismatch= "DENY" /> </Filters> <PatternLayout pattern= "%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy interval= "1" /> <SizeBasedTriggeringPolicy size= "1MB" /> </Policies> <DefaultRolloverStrategy max= "20" /> </RollingRandomAccessFile> <!--全部日志信息:DEBUG及以上级别--> <RollingRandomAccessFile name= "ALL" fileName= "logs/${FILE_NAME}-ALL.log" filePattern= "log/${FILE_NAME}-ALL%d{yyyy-MM-dd}_%i.log.gz" > <Filters> <ThresholdFilter level= "DEBUG" onMatch= "ACCEPT" onMismatch= "DENY" /> </Filters> <PatternLayout pattern= "%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy interval= "1" /> <SizeBasedTriggeringPolicy size= "10MB" /> </Policies> <DefaultRolloverStrategy max= "20" /> </RollingRandomAccessFile> <!--配置异步写日志--> <Async name= "Async" > <AppenderRef ref= "ALL" /> </Async> </Appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <Loggers> <!--监控系统信息--> <Logger name= "org.springframework" level= "info" additivity= "false" > <AppenderRef ref= "Console" /> </Logger> <Root level= "debug" > <!-- 这儿为trace表示什么都可以打印出来了,其他几个级别分别为:TRACE、DEBUG、INFO、WARN、ERROR和FATAL --> <Appender-Ref ref= "Console" /> <Appender-Ref ref= "INFO" /> <Appender-Ref ref= "ERROR" /> <Appender-Ref ref= "FATAL" /> </Root> </Loggers> </Configuration> |
3、写测试并运行
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static Logger logger = LogManager.getLogger(Test.class);
public static void main(String[] args) {
logger.info("info:xxxxx......");
logger.error("error:xxxx......");
}
}
4、log指定文件:自动打印info、error日志
5、整体code:
https://gitlab.com/huaruizhi1/log4j2demo/-/tree/main
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2023-09-22 中文图形验证码 动态图形验证码 图片验证码 验证码【加逻辑思路解析】
2022-09-22 【逻辑】【java基础】java Test测试类 业务测试类
2022-09-22 【逻辑】【java基础】代码逻辑思路 层级关系 【层级注解】【架构逻辑】
2022-09-22 【逻辑】【java基础】查询逻辑 分页查询【实用】