Software_programming_log4j2
2019-10-02
1 slf4j 抽象日志框架 与 log4j2 的 组合
SLF4J 并不是一个日志框架,是一个允许用户在部署时以插件形式嵌入任何日志系统的抽象层。需要目标日志框架的核心库。
Log4j2 是一个日志框架。
1) slf4j 桥接 log4j-slf4j-impl
2) log4j-api, log4j-core
reference : https://www.cnblogs.com/jiyukai/p/9418463.html
<!-- log -->
<!-- 导入slf4j接口包以及对应的 log4j2 日志框架的驱动包 -->
<!-- slf4j interface -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log4j - slf4j driver -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.1</version>
</dependency>
<!-- log framework core and api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-taglib</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 解决web 环境下关闭服务器时可能出现的 log4j线程无法及时关闭的 warn, web工程需要包含 log4j-web jar, 非web工程不需要-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- log4j AsyncLogger 需要 disruptor -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>
<!--log framework dependencies,end -->
Java 项目中的 classpath 指的是
ans: lib 和 classes 同属 classpath, 优先级 lib > classes
1. src 不是 classpath,
WEB-INF/classes, lib 才是 classpath,
Web-INF 是资源目录,客户端不能直接访问
2. WEB-INF/Classes 目录存放 src 目录 java 文件编译之后的 class 文件, xml, properties 等资源配置文件, 这是一个定位资源的入口。
1 xml output path 的 设定
note:
注意 import 时看准
因为没注意导入依赖引发的 error
log4j2.xml config demo
<?xml version="1.0" encoding="UTF-8" ?> <!-- config LoggerConfig --> <configuration status="error"> <Properties> <property name="fileName">src/main/resource/log/Automation.log</property> <property name="rollingLog">src/main/resource/log/rollingFile/app.log</property> </Properties> <!-- Appenders , output log target --> <appenders> <Console name="Console" target="SYSTEM_OUT"> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %l %M - %msg%xEx%n"/> </Console> <File name="log" fileName="${fileName}" append="false"> <PatternLayout pattern="%d{dd-MM-yyyy HH:mm} %-5level %class{36} %l %M - %msg%xEx%n"/> </File> <RollingFile name="RollingFile" filename="${rollingLog}" filePattern="src/main/resource/log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.zip"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %5-level %class{36} %L %M - %msg%xEx%n "/> <SizeBasedTriggeringPolicy size="10 kB"/> <DefaultRolloverStrategy max="10"/> </RollingFile> </appenders> <!-- Loggers --> <Loggers> <Root level="trace"> <appender-ref ref="log"/> <appender-ref ref="Console"/> </Root> </Loggers> </configuration>