gpt4 book ai didi

java - 在 JUL 日志处理程序中记录

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:51 27 4
gpt4 key购买 nike

我为 JUL 创建了一个新的日志处理程序,它扩展了 java.util.logging.Handler。

有没有什么标准化的方法可以让我对 LogRecord(比如 log4j 中的 LogLog)处理过程中发生的错误使用react?

仅使用 JUL-Logger 会产生另一个必须由同一个处理程序处理的 LogRecord。

所以,我基本上是在寻找一种(标准)方式来记录消息,而不会产生无限循环。目前,我正在比较 sourceClassName 以防止出现此类循环。

最佳答案

处理程序内部发生的异常应该使用 Handler.reportError(String, Exception, int) 报告.这会向已安装的可以自定义的 ErrorManager 报告故障。使用它应该可以处理大部分无限循环。

但是,如果发布行为依赖于也生成日志记录的库,那么您必须求助于检测循环。使用java.lang.ThreadLocal和某种枚举来跟踪状态变化。

public class HandlerReentrance extends Handler {

private static final Level PUBLISH = Level.ALL;
private static final Level REPORT = Level.OFF;

private static final ThreadLocal<Level> LOCAL = new ThreadLocal<>();

@Override
public void publish(LogRecord record) {
if (LOCAL.get() == null) {
LOCAL.set(PUBLISH);
try {
doPublish(record);
} finally {
LOCAL.remove();
}
} else {
final Level last = LOCAL.get();
if (PUBLISH.equals(last)) {
LOCAL.set(REPORT);
try {
reportLoop(record);
} finally {
LOCAL.set(last);
}
}
}
}

private void doPublish(LogRecord record) {
if (isLoggable(record)) {
//Insert code.
}
}

private void reportLoop(LogRecord record) {
//Insert code.
}

@Override
public void flush() {
}

@Override
public void close() {
}
}

关于java - 在 JUL 日志处理程序中记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35577537/

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