log4j2 slf4j
2019-06-21 本文已影响0人
MakeACoder
jar包说明
slf4j的api接口包:slf4j-api
log4j2的核心包:log4j-core
log4j2的api接口包:log4j-api
slf4j对应log4j2日志框架的驱动包:log4j-slf4j-impl
log4j2的异步日志功能包:com.lmax.disruptor
解决web项目log4j可能出现警告的jar包:log4j-web
log-web包 作用
主要用于解决web环境下关闭服务器时可能出现的log4j线程无法及时关闭的warn web工程需要包含log4j-web,非web工程不需要
log4j 官方手册:https://logging.apache.org/log4j/2.x/manual/webapp.html
在Java EE Web应用程序中使用Log4j或任何其他日志记录框架时,您必须特别小心。 当容器关闭或取消部署Web应用程序时,正确清理日志资源(关闭数据库连接,关闭文件等)非常重要。 由于Web应用程序中类加载器的性质,无法通过常规方式清除Log4j资源。 当Web应用程序部署并在Web应用程序取消部署时“关闭”时,Log4j必须“启动”。 它的工作原理取决于您的应用程序是Servlet 3.0还是更新版本或Servlet 2.5 Web应用程序。
为避免出现问题,当包含log4j-web jar时,将自动禁用Log4j关闭挂钩。
上面是 log4j 官方的文档,上文的大意就是 Log4j 默认会用一个 Runtime.getRuntime().addShutdownHook
钩子用来在程序关闭时释放资源,可见源码部分
,由于 web 服务比较特殊,避免像 kill -9 这种不触发钩子,可以使用 log4j-web 这个jar,它是利用的 Servlet 的生命周期来进行 log4j 的配置和资源的释放
。
log类创建
用slf4j的方式创建logger 两个类(logger和LoggerFactory都是slf4j的)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogHelper {
//用slf4j的方式创建logger 两个类(Logger和LoggerFactory都是slf4j的)
Logger logger = LoggerFactory.getLogger(LogHelper.class);
}
直接用log4j创建时 用的是 Logger(跟上面的包不一样)
和LogManager
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LogHelper {
//直接log4j2获取
private static final Logger logger = LogManager.getLogger(LogHelper.class);
}