java - 禁用 log4j 2 异常(apache 的异常)
问题描述
事实证明,log4j2 有时可能是不安全的。记录消息可能会引发异常,从而破坏功能。我认为这不是所需的日志行为 - 日志记录应该会失败而不会导致功能崩溃。这是一个基本示例:
InstrumentedAppender = new InstrumentedAppender (..);
appender.start();
...
appender.stop();
final Logger logger = LogManager.getLogger("LOG4J_TEST");
try {
logger.error("TEST_ERROR");
} catch (Exception e){
System.out.println("-------------- Exception is thrown");
e.printStackTrace()
}
在我的输出中我得到了这个:
org.apache.logging.log4j.core.appender.AppenderLoggingException: Attempted to append to non-started appender org.apache.logging.log4j.core.Appender
at org.apache.logging.log4j.core.config.AppenderControl.handleError(AppenderControl.java:142)
at org.apache.logging.log4j.core.config.AppenderControl.ensureAppenderStarted(AppenderControl.java:135)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:127)
at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
...........
有什么办法可以在我的应用程序中避免这种日志行为?
解决方案
这可以使用 appender 上的 ignoreExceptions 标志进行设置:
默认值为 true,导致在附加事件时遇到的异常被内部记录,然后被忽略。当设置为 false 时,异常将被传播给调用者。将此 Appender 包装在 FailoverAppender 中时,必须将其设置为 false。
推荐阅读
- python - 如何使用 curses 和 Python 设置窗口背景颜色?
- mongodb - ServerSelectionTimeoutError:通过 pymongo 连接到 Atlas 时出现超时错误
- java - Mysql Get_Lock 和 Release_Lock 函数耗时较长
- php - 获取当前时间,将其设置为不更新的变量
- java - 如何使用放心验证带有特殊字符的响应正文?
- jquery - Laravel 中基于 Ajax 的自动完成功能太慢
- python - 如何为我的 Dash 应用程序正确添加样式?
- .net - 单元测试 web api
- python - 将 auth_views.login 从 django 1 转换为 2
- arrays - 试图删除数组中的 _id。它似乎不起作用