web项目中log4j2的log4j-web包如果不添加,会影响哪些日志输出?

如题
Springmvc的web项目,使用slf4j+log4j2做日志输出,如果maven依赖中不加入log4j-web包,会影响哪些日志的输出格式?

阅读 9.6k
1 个回答

官方文档:https://logging.apache.org/lo...

在Java EE Web应用程序中使用Log4j或任何其他日志记录框架时,您必须特别小心。 当容器关闭或取消部署Web应用程序时,正确清理日志资源(关闭数据库连接,关闭文件等)非常重要。 由于Web应用程序中类加载器的性质,无法通过常规方式清除Log4j资源。 当Web应用程序部署并在Web应用程序取消部署时“关闭”时,Log4j必须“启动”。 它的工作原理取决于您的应用程序是Servlet 3.0还是更新版本或Servlet 2.5 Web应用程序。

在任何一种情况下,您都需要将log4j-web模块添加到您的部署中,详见Maven,Ivy和Gradle Artifacts手册页。

为避免出现问题,当包含log4j-web jar时,将自动禁用Log4j关闭挂钩。

上面是 log4j 官方的文档,上文的大意就是 Log4j 默认会用一个 Runtime.getRuntime().addShutdownHook 钩子用来在程序关闭时释放资源,可见源码部分
,由于 web 服务比较特殊,避免像 kill -9 这种不触发钩子,可以使用 log4j-web 这个jar,它是利用的 Servlet 的生命周期来进行 log4j 的配置和资源的释放。

感谢朋友的问题,通过该问题我也学习了不少。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏