Log4j Log for java 以什么样的格式,按照什么样的优先级,将日志输出到哪里?
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
如果同时配置log4j.xml和log4j.properties,则log4j.xml生效
配置文件 log4j.xml的介绍
与log4j.properties比较,大部分功能是一样的,可以查看https://blog.csdn.net/qq_30426943/article/details/106348335
这里主要记录log4j.xml可以,而log4j.properties不能实现的功能:
- 可以过滤级别,无论谁引用这个appender,都只能拿到设置级别区间的日志
- 控制日志的传播机制,比如,我想打印com.isoftstone下的日志为info,而com.isoftstone.dao下的日志为error,但是root下为debug;那么如果都设置好后会打印重复的日志,相对于om.isoftstone.dao来说会打印三条,那么我只想打印一条,则这时候就要取消传播机制; additivity="false"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="log.console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss,SS} %-5p (%C{1}:%M) - %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="log.file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="D://log33.log"/>
<param name="Append" value="true"/>
<param name="DatePattern" value="yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss,SS} %-5p (%C{1}:%M) - %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>
<!-- com.isoftstone包下的文件日志,级别为info 且根据name为log.console和 log.file两个appender输出-->
<logger name="com.isoftstone" additivity="false">
<level value="info"/>
<appender-ref ref="log.console"/>
<appender-ref ref="log.file"/>
</logger>
<!-- com.isoftstone.dao包下的文件日志,级别为error 且根据name为log.console和 log.file两个appender输出-->
<logger name="com.isoftstone.dao" additivity="false">
<level value="error"/>
<appender-ref ref="log.console"/>
<appender-ref ref="log.file"/>
</logger>
<!-- 默认配置,级别为debug 且根据name为log.console和 log.file两个appender输出-->
<root>
<level value="debug"/>
<appender-ref ref="log.console"/>
<appender-ref ref="log.file"/>
</root>
</log4j:configuration>
测试代码
package com.isoftstone;
import org.apache.log4j.Logger;
public class MyTest {
private static final Logger LOGGER = Logger.getLogger(MyTest.class);
public static void main(String[] args) {
LOGGER.info("info.....");
LOGGER.debug("debug.....");
LOGGER.error("error.....");
LOGGER.warn("warn.....");
LOGGER.fatal("fatal...");
LOGGER.error("报错信息:",new IllegalArgumentException("非法参数"));
}
}
后台打印结果
测试代码
package com.isoftstone.dao;
import org.apache.log4j.Logger;
public class UserDao {
private static final Logger LOGGER = Logger.getLogger(UserDao.class);
public static void main(String[] args) {
int age = 10;
try {
LOGGER.debug("1111");
age = 10/0;
LOGGER.debug("2222");
} catch (Exception e) {
//e.printStackTrace();
LOGGER.error(e.getMessage(),e.getCause());
//throw new XXX 这里抛出自定义的异常处理
}
}
}
后台打印结果
如果是Slf4j
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<!-- <scope>test</scope> -->
</dependency>
public class Log4jTest {
private static final Logger logger = LoggerFactory.getLogger(Log4jTest.class);
public static void main(String[] args) {
logger.debug("debug");
logger.warn("warm");
logger.error("error");
}
}