log4j2简介
log4j2设计之初是为了审计,log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。
- log4j2相比log4j和logback有很大的性能替身。
- log4j2能够自动重载配置,log4j2通过参数配置,可以不用重启应用而自动重新加载log4j2的配置文件。
- log4j2能够避免死锁。
Log4j2与其他框架比较
明显可以看出,与各个日志框架对比而言,无论在同步或者异步情况下,log4j2表现更加优异,而其他日志就显得差强人意了。
Springboot集成Log4j2
本文仅采用同步日志写法,异步日志暂不赘述。实际线上情况可能仅会打印info级别的日志,而info级别的日志会包括info-log、warn-log、error-log、fatal-log。
pom依赖
org.springframework.boot
spring-boot-starter-web
spring-boot-starter-logging
org.springframework.boot
log4j
*
org.slf4j
*
org.apache.logging.log4j
*
org.springframework.boot
spring-boot-starter-log4j2
application.properties配置
logging.config=classpath:log4j2-spring.xml
log4j2-spring.xml文件配置
./WebAppLogs/logs
仅info-log的log4j2-spring.xml的配置文件
./WebAppLogs/logs
日志实现-slf4j(LogFactory)
public class LogUtil {
/**
* debug级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void debug(Class clazz, String msg, Object... params) {
Logger logger = LoggerFactory.getLogger(clazz.getName());
logger.debug(msg, params);
}
/**
* trace日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void trace(Class clazz, String msg, Object... params) {
Logger logger = LoggerFactory.getLogger(clazz.getName());
logger.trace(msg, params);
}
/**
* info级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void info(Class clazz, String msg, Object... params) {
Logger logger = LoggerFactory.getLogger(clazz.getName());
logger.info(msg, params);
}
/**
* warn级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void warn(Class clazz, String msg, Object... params) {
Logger logger = LoggerFactory.getLogger(clazz);
logger.warn(msg, params);
}
/**
* error级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void error(Class clazz, String msg, Object... params) {
Logger logger = LoggerFactory.getLogger(clazz);
logger.error(msg, params);
}
}
日志实现Log4j(LogManager)
public class LogUtilManager {
/**
* debug级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void debug(Class clazz, String msg, Object... params) {
Logger logger = LogManager.getLogger(clazz.getName());
logger.debug(msg, params);
}
/**
* trace级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void trace(Class clazz, String msg, Object... params) {
Logger logger = LogManager.getLogger(clazz.getName());
logger.trace(msg, params);
}
/**
* info级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void info(Class clazz, String msg, Object... params) {
Logger logger = LogManager.getLogger(clazz.getName());
logger.info(msg, params);
}
/**
* warn级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void warn(Class clazz, String msg, Object... params) {
Logger logger = LogManager.getLogger(clazz);
logger.warn(msg, params);
}
/**
* error级别日志输出
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void error(Class clazz, String msg, Object... params) {
Logger logger = LogManager.getLogger(clazz);
logger.error(msg, params);
}
/**
* fatal日志
* @param clazz 类
* @param msg 日志
* @param params 其他参数
*/
public static void fatal(Class clazz, String msg, Object... params) {
Logger logger = LogManager.getLogger(clazz);
logger.fatal(msg, params);
}
}
两种实现的调用
void testLog() {
LogUtil.info(ConfigApplicationTests.class, "this is logfactory info log");
LogUtilManager.info(ConfigApplicationTests.class, "this is logmanager info log");
}
日志输出
总结
本文总结了springboot
集成log4j2
,当然实际业务情况也有才有logback+slf4j等方式来实现,log4j2
在各个方面都表现优异。
参考文章
- [1].聊一聊log4j2配置文件log4j2.xml.https://www.cnblogs.com/hafiz...
- [2].Log4j2的日志配置文件,log4j2.xml文件的配置.https://www.cnblogs.com/hyyq/...
- [3].log4j网站.http://logging.apache.org/log...