gpt4 book ai didi

java - 重置 Logback Appender

转载 作者:太空狗 更新时间:2023-10-29 14:06:32 24 4
gpt4 key购买 nike

我有一个关于 Logback 的问题。

精简版

如果附加程序的创建失败(例如权限被拒绝),当权限问题得到解决时,我如何明确地重新尝试创建它。我正在使用 XML 配置。我想在不重新启动流程的情况下执行此操作。

更长的版本

我在 Android 上使用 Logback ( logback-android )。

我正在登录到外部存储上的一个目录,这意味着如果用户将设备连接到PC并启用大容量存储,该目录的文件系统将被卸载。

如果应用程序已启动,而目录不可用,我会通知用户,但由于记录器被定义为静态字段...

private static final Logger LOG = LoggerFactory.getLogger(MyApplication.class);

...当类加载器加载我的类并失败时,Logback 无论如何都会尝试创建 appender。

由于 Android 的工作方式,即使用户离开我的应用程序的所有屏幕(例如转到主屏幕),应用程序进程也会继续运行,因此永远不会重新尝试创建附加程序。

有什么方法可以从配置中重置 appender 吗?如果是这样,只要用户进入我的应用程序的初始屏幕,我就可以在必要时尝试重置 Logback。

我试图用...来阻止它

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
if (loggerContext != null)
loggerContext.stop();

...这似乎工作正常但我似乎无法重新启动它:

loggerContext.start()

这似乎并没有重新创建 appender。

非常感谢您的帮助。

最佳答案

重启appender可以通过重新加载LogBack的配置来实现。在我的例子中,我在 XML 文件中进行了配置,所以我使用了一些类似的东西:

// reset the default context (which may already have been initialized)
// since we want to reconfigure it
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
lc.reset();

JoranConfigurator config = new JoranConfigurator();
config.setContext(lc);

try {
config.doConfigure("/path/to/config.xml");
} catch (JoranException e) {
e.printStackTrace();
}

关于java - 重置 Logback Appender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com