如题
Springmvc的web项目,使用slf4j+log4j2做日志输出,如果maven依赖中不加入log4j-web包,会影响哪些日志的输出格式?
如题
Springmvc的web项目,使用slf4j+log4j2做日志输出,如果maven依赖中不加入log4j-web包,会影响哪些日志的输出格式?
2 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答904 阅读✓ 已解决
2 回答1.5k 阅读
官方文档: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 的配置和资源的释放。
感谢朋友的问题,通过该问题我也学习了不少。