我正在使用 Log4j2。要求是,如果记录器无法写入日志文件(访问被拒绝、锁定等),则应用程序应关闭。
我编写了以下类来实现这一点:
import org.apache.logging.log4j.core.ErrorHandler;
public class LogFileErrorHandler extends ErrorHandler {
private static final Logger LOGGER = StatusLogger.getLogger();
@Override
public void error(String msg) {
LOGGER.error(msg);
System.exit(ExitCodes.IO_LOGGER_COULD_NOT_WRITE);
}
... more error implementations
}
我用下面的代码以编程方式构建我的文件记录器:
public static final ConfigurationBuilder<BuiltConfiguration> BUILDER = ConfigurationBuilderFactory.newConfigurationBuilder
public void initFileLoggerWithFilePattern(final String pattern) {
final LoggerComponentBuilder logger = BUILDER.newLogger("FileLogger", Level.DEBUG);
final AppenderComponentBuilder appender = createFileAppenderWithFilePattern(pattern);
BUILDER.add(appender);
logger.add(BUILDER.newAppenderRef("RollingFileAppender"));
BUILDER.add(logger);
Configurator.initialize(BUILDER.build());
}
public AppenderComponentBuilder createFileAppenderWithFilePattern(final String pattern) {
final AppenderComponentBuilder acb = BUILDER.newAppender("RollingFileAppender", "RollingFile");
acb.addAttribute("fileName", pattern);
acb.addAttribute("filePattern", pattern);
acb.addComponent(createPatternLayout());
acb.addComponent(createTimeBasedTriggeringPolicy());
return acb;
}
public LayoutComponentBuilder createPatternLayout() {
final LayoutComponentBuilder lcb = BUILDER.newLayout("PatternLayout");
lcb.addAttribute("pattern", "%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT}Z %m");
return lcb;
}
public ComponentBuilder createTimeBasedTriggeringPolicy() {
final ComponentBuilder policies = BUILDER.newComponent("Policies");
final ComponentBuilder policy = BUILDER.newComponent("TimeBasedTriggeringPolicy");
policies.addComponent(policy);
return policies;
}
现在我的问题:
我知道在Log4j 1。X.X版本向日志程序添加一个错误处理程序是非常容易的。您可以简单地这样做:
logger.setErrorHandler(your error handler);
如何在Log4j2版本2.13.3中使用上面的代码执行此操作?
这是一个错误。请为其创建一个Jira问题。AbstractAppender支持通过setErrorHandler方法添加错误处理程序,但是没有ErrorHandller插件类型,AbstractAppender的Builder不提供错误处理程序属性来指定错误处理程序。这意味着实现这一点的唯一方法是编写一个客户Appender或为Appender编写一个包装器,在其构造函数或start方法中注入错误处理程序。
我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:
我有一个模型,其中有一个@列(nullable=false)注释HiberNate和所有字段有nullable=false,我想以编程方式添加一些新的注释,如@NotNull和@ApiModelProperty(必需=true)-用于招摇过市。 所以,我希望能够从我的应用程序的模型中解析所有字段,获得现有的注释,并在此基础上添加新的注释。这能做到吗? 更新:问题是每次添加一个新字段,如果它不能为空
问题内容: 是否可以使用XML配置中的规范以编程方式添加Log4J2附加程序? 我计划在log4j2.xml中定义所有内容,然后按情况选择追加器(不会编译): 问题答案: 编辑:有关log4j2的最新版本,请参阅下方答案 我给他们留下了不希望您这样做的印象,但这对我有用:
问题内容: 我想以编程方式从应用程序中加载Log4j2 XML配置文件。 试过这个: 还有这个: 但是什么都没有。 问题答案: 自己找到答案。有人可能会觉得有用。
问题内容: 当我需要保存一个对象列表时,每个对象都应保存在它自己的事务中(这样,如果一个对象失败了,它们就不会全部失败),我可以这样做: 我之所以使用,是因为如果一本书无法保存并且交易被回滚,则该会话将无效,这将阻止后续书籍的保存。但是,这种方法存在两个问题: 有点冗长 即使上一本书成功,也会为每本书创建一个新的会话 有没有更好的办法?我发生的一种可能性是依赖注入Hibernate,然后执行此操作
我正在使用SpringDoc,并试图以编程方式向OpenApi添加一个模式,但没有成功。 mySchema的描述没有添加到我在生成的YAML文件中看到的模式列表中,如果我试图引用它: