查看“Log4j 2 入门”的源代码
←
Log4j 2 入门
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
https://www.bilibili.com/video/BV1iJ411H74S?p=32 === 简介 === Apache Log4j 2 是对 Log4j 的升级版,参考了 Logback 的一些优秀设计,并且修复了一些问题,因此带来了一些重大提升,主要有: * 异常处理,在 Logback 中,Appender 中的异常不会被应用感知到,但是在 Log4j 2 中,提供了一些异常处理机制。 * 性能提升,Log4j 2 相较于 Log4j 和 Logback 都具有很明显的性能提升:https://logging.apache.org/log4j/2.x/performance.html#logging-library-performance-comparison * 自动重载配置,参考了 Logback 的设计,当然会提供自动刷新参数配置,最实用的就是在生产环境中可以动态地修改日志的级别而不需要重启应用 * 无垃圾机制,Log4j 2 在大部分情况下,都可以使用其设计的一套无垃圾机制,避免频繁的日志收集导致的 JVM GC 官网:https://logging.apache.org/log4j/2.x/ 目前市面上最主流的日志门面就是 SLF4J ,虽然 Log4j 2 也是日志门面,因为它的日志实现功能非常强大,性能优越。 所以一般还是将 Log4j 2 看作是日志的实现,SLF4J + Log4j 2 应该是未来的大势所趋。 === 示例 初次使用 === ==== pom.xml ==== <syntaxhighlight lang="xml"> <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>io.github.jihch</groupId> <artifactId>log4j2-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!-- Log4j 2 的日志门面 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.11.1</version> </dependency> <!-- Log4j 2 的日志实现 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.1</version> </dependency> <!-- JUnit 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project> </syntaxhighlight> ==== Log4j2Test.java ==== <syntaxhighlight lang="java"> import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Test; public class Log4j2Test { // 定义日志记录器对象 public static final Logger LOGGER = LogManager.getLogger(Log4j2Test.class); //快速入门 @Test public void testQuick() { // 日志消息输出 LOGGER.fatal("fatal"); LOGGER.error("error"); LOGGER.warn("warn"); LOGGER.info("info"); LOGGER.debug("debug"); LOGGER.trace("trace"); } } </syntaxhighlight><syntaxhighlight lang="console"> ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2 10:55:13.961 [main] FATAL io.github.jihch.Log4j2Test - fatal 10:55:13.963 [main] ERROR io.github.jihch.Log4j2Test - error </syntaxhighlight>可以看出 Log4j 2 的日志级别默认是 error; 还有警告信息:未找到 Log4j 2 配置文件 === 示例 加入配置文件 === ==== log4j2.xml ==== <syntaxhighlight lang="xml"> <?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn" monitorInterval="5"> <properties> <property name="LOG_NAME">E:/logs</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" /> </Console> <File name="file" fileName="${LOG_HOME}/myfile.log"> <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </File> <RandomAccessFile name="accessFile" fileName="${LOG_HOME}/myAcclog.log"> <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> </RandomAccessFile> <RollingFile name="rollingFile" fileName="${LOG_HOME}/myrolling.log" filePattern="E:/logs/$${date:yyyy-MM-dd}/myrolllog-%d{yyyy-MM-dd-HH-mm}-%i.log"> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" /> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10MB" /> <TimeBasedTriggeringPolicy /> </Policies> <DefaultRolloverStrategy max="30"/> </RollingFile> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration> </syntaxhighlight>再次运行:<syntaxhighlight lang="console"> 11:17:15.000 [main] [FATAL] io.github.jihch.Log4j2Test:17 --- fatal 11:17:15.003 [main] [ERROR] io.github.jihch.Log4j2Test:18 --- error 11:17:15.003 [main] [WARN ] io.github.jihch.Log4j2Test:19 --- warn 11:17:15.004 [main] [INFO ] io.github.jihch.Log4j2Test:20 --- info 11:17:15.004 [main] [DEBUG] io.github.jihch.Log4j2Test:21 --- debug 11:17:15.004 [main] [TRACE] io.github.jihch.Log4j2Test:22 --- trace </syntaxhighlight>配置文件在 Appenders 中声明了多个 Appender; 在 Loggers 中为 Root 指定了日志级别为 “trace”,使用的 Appender 是 name=“Console”的 Appender; 所以控制台中出现了对应配置的日志记录 === 示例 使用 SLF4J 作为日志门面,Log4j 2 作为日志实现 ===
返回至
Log4j 2 入门
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
Spring Boot 2 零基础入门
Spring Cloud
Spring Boot
设计模式之禅
VUE
Vuex
Maven
算法
技能树
Wireshark
IntelliJ IDEA
ElasticSearch
VirtualBox
软考
正则表达式
程序员精讲
软件设计师精讲
初级程序员 历年真题
C
SQL
Java
FFmpeg
Redis
Kafka
MySQL
Spring
Docker
JMeter
Apache
Linux
Windows
Git
ZooKeeper
设计模式
Python
MyBatis
软件
数学
PHP
IntelliJ IDEA
CS基础知识
网络
项目
未分类
MediaWiki
镜像
问题
健身
国债
英语
烹饪
常见术语
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息