1. Log4j 1.2.17 properties配置
1.1 准备工作
- 创建maven工程
- 引入log4j的jar包
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
1.2 配置文件(properties和xml二选一)
log4j.properties
# log4j 配置
## 输出log到控制台
log4j.rootLogger=fatal,console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern = %d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n
## 输出日志到文件1
log4j.logger.demo1=warn,demo1
log4j.appender.demo1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.demo1.Append = true
log4j.appender.demo1.file = ./logs/demo1.log
log4j.appender.demo1.DatePattern = .yyyyMMdd
log4j.appender.demo1.Threshold = trace
log4j.appender.demo1.layout = org.apache.log4j.PatternLayout
log4j.appender.demo1.layout.conversionPattern = %d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n
## 输出日志到文件2
log4j.logger.demo2=fatal,demo2
log4j.appender.demo2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.demo2.Append = true
log4j.appender.demo2.file = ./logs/demo2.log
log4j.appender.demo2.DatePattern = .yyyyMMdd
log4j.appender.demo2.Threshold = trace
log4j.appender.demo2.layout = org.apache.log4j.PatternLayout
log4j.appender.demo2.layout.conversionPattern = %d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN"
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 将日志信息输出到控制台 -->
<appender name="console_appender" class="org.apache.log4j.ConsoleAppender" >
<param name="Target" value="System.out" />
<!-- 设置日志输出的样式 -->
<layout class="org.apache.log4j.PatternLayout">
<!-- 设置日志输出的格式 -->
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n" />
</layout>
<!--过滤器设置输出的级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<!-- 设置日志输出的最小级别 -->
<param name="levelMin" value="WARN" />
<!-- 设置日志输出的最大级别 -->
<param name="levelMax" value="ERROR" />
<!-- 设置日志输出的xxx,默认是false -->
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--输出方式:每天一个日志文件 -->
<appender name="demo3_file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./logs/demo3.log" />
<param name="Append" value="true" />
<param name="DatePattern" value=".yyyyMMdd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l [%-5p] %m%n" />
</layout>
</appender>
<logger name="demo3" additivity="false">
<level class="org.apache.log4j.Level" value="fatal" />
<appender-ref ref="demo3_file" />
</logger>
<!-- 没有配置logger时,root配置生效 -->
<root>
<appender-ref ref="console_appender" />
</root>
</log4j:configuration>
1.3 测试
public static void main(String[] args) {
Logger log = Logger.getLogger("demo3");
log.fatal(" 严重错误,一般造成系统崩溃并终止运行");
log.error(" 错误信息,不会影响系统运行");
log.warn(" 警告信息,可能会发生问题");
log.info(" 运行信息,数据连接,网络连接,IO操作等");
log.debug(" 调试信息,一般在开发中使用,记录程序变量传递信息等等");
log.trace(" 追踪信息,记录程序所有的流程信息");
}
1.4 关于日志输出格式
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为IS08601,也可以在其后指定格式,
比如: %dyyy MMM dd HH:mm:ss,SSS},输出类似2002年10月18日 22: 10: 28,921
%r: 输出自应用启动到输出该1og信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C,%M(%;%)的组合,包括类目名、发生的线程,以及在代码中的行数。
举例:Test1og4.main(TestLog4.Java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java servlets这样的多客户多线程的应用中,
输出一个”%”字符%%:
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,windows平台为”r n”,unix平台为”n”输出日志信息换行
2. log4j2 配置
2.1 准备工作
- 创建maven工程
- 引入依赖
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.20.0</version>
</dependency>
2.2 配置文件
log4j2的配置文件不再支持properties,但同时支持log4j2.xml,log4j.json,log4j.jsn等名称的配置文件.这里只展示xml配置方法
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info" >
<Properties>
<Property name="logDir">./logs</Property>
</Properties>
<!-- 定义appenders -->
<appenders>
<!-- 控制台日志输出 -->
<Console name="console" target="SYSTEM_OUT" >
<!-- 定义控制台输出级别 默认输出info以上的信息 -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{HH:mm:ss:SSS} %l %-5level %m%n" />
</Console>
<!-- 日志文件输出 -->
<File name="demo4_filePattern" fileName="${logDir}/demo4.log" append="true">
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
</File>
<File name="demo5_filePattern" fileName="${logDir}/demo5.log" append="true">
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
</File>
<rollingFile name="demo4_rollingFile" filePattern="${logDir}/demo4-$${date:yyyy-MM-dd}-%i.log" >
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
<policies>
<CronTriggeringPolicy schedule="0 40 23 * * ?" />
<SizeBasedTriggeringPolicy size="200MB" />
</policies>
<!-- 每天日志最多切分成10个 -->
<DirectWriteRolloverStrategy maxFiles="10">
<Delete basePath="${logDir}" maxDepth="2">
<!-- 此处注意,如果没有*/不会生效 -->
<IfFileName glob="*/.*.log" />
<!-- 超过30天的日志自动删除,滚动的时候触发 -->
<IfLastModified age="P365D" />
</Delete>
</DirectWriteRolloverStrategy>
</rollingFile>
<rollingFile name="demo5_rollingFile" filePattern="${logDir}/demo5-$${date:yyyy-MM-dd}-%i.log" >
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %-5level %m%n" />
<policies>
<CronTriggeringPolicy schedule="0 40 23 * * ?" />
<SizeBasedTriggeringPolicy size="200MB" />
</policies>
<!-- 每天日志最多切分成10个 -->
<DirectWriteRolloverStrategy maxFiles="10">
<Delete basePath="${logDir}" maxDepth="2">
<!-- 此处注意,如果没有*/不会生效 -->
<IfFileName glob="*/.*.log" />
<!-- 超过30天的日志自动删除,滚动的时候触发 -->
<IfLastModified age="P365D" />
</Delete>
</DirectWriteRolloverStrategy>
</rollingFile>
</appenders>
<loggers>
<root level = "trace" >
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
</root>
<logger name="demo4">
<appender-ref ref="demo4_filePattern" />
<appender-ref ref="demo4_rollingFile" />
</logger>
<logger name="demo5">
<appender-ref ref="demo5_filePattern" />
<appender-ref ref="demo5_rollingFile" />
</logger>
</loggers>
</configuration>
1.3 关于日志输出格式
%c 输出logger名称
%C 输出类名
%d{HH:mm:ss.sss} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符.如果不足在右边补0
%logger 输出logger名称因为Root Logger没有名称,所以没有输出%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M或%method 输出所在方法名
%l 输出完整的错误位置,包括类名、方法名、文件名、行数
%p 该条日志的优先级
%replace{patternHregexHsubstitution} 将pattern的输出结果pattern按照正则表达式regex替换成substitution