gpt4 book ai didi

java - 重定向来自从父级继承 Logger 的抽象子类的记录器消息

转载 作者:行者123 更新时间:2023-12-02 06:06:21 25 4
gpt4 key购买 nike

我正在开发一个 Java 项目(不是我的),该项目在许多其他依赖项中使用 spring-beans。我的目标是将所有记录器消息从多个 spring-beans 类重定向到一个文件,以便它们在控制台日志中不可见。我选择了编程方法,因为在这种情况下这更适合我,在谷歌搜索一些 Log4j 解决方案后,找到了一个(几乎)适合我的方法:

public static void removeConsoleLogsByClassName(String fullClassName) {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
PatternLayout layout = PatternLayout.newBuilder()
.withPattern("%d{yyyy-MM-dd HH:mm:ss} %c{2} | [%t] | %-5level: - %m%n")
.withConfiguration(config).build();
Appender appender = FileAppender.createAppender(
"some_location_goes_here/logfile.log",
"false",
"false", "fileAppender", "true", "false", "false", "8192", layout, null, "false", null, config);
appender.start();
config.addAppender(appender);
AppenderRef ref = AppenderRef.createAppenderRef("fileAppender", null, null);
AppenderRef[] refs = new AppenderRef[] { ref };
org.apache.logging.log4j.core.config.LoggerConfig loggerConfig = LoggerConfig.createLogger(false,
org.apache.logging.log4j.Level.TRACE,
fullClassName,
"true", refs, null, config, null);
loggerConfig.addAppender(appender, null, null);
if ("false".equals(TestInfo.getEnableLog())) {
loggerConfig.setLevel(org.apache.logging.log4j.Level.OFF);
}
config.addLogger(fullClassName, loggerConfig);
ctx.updateLoggers();
}

使用此方法,我可以提供类名称,并以编程方式将记录器消息重定向到文件,这正是我所需要的。除了 spring-beans 中从某些父类继承 LOGGER 对象的(抽象)类之外,这种方法是有效的。

就我而言,我试图将日志消息从 AbstractBeanFactory 重定向到文件,但它们仍然显示在控制台中。我认为这是因为此类从 DefaultSingletonBeanRegistry 继承了 LOGGER 对象,但我不确定。

Classes hierarchy

如果有人对此有任何建议/解决方案,我将不胜感激。提前致谢。

最佳答案

如果您查看层次结构中顶层类的源代码 ( SimpleAliasRegistry ),您将看到记录器的初始化:

/** Logger available to subclasses. */
protected final Log logger = LogFactory.getLog(getClass());

getClass() 返回运行时具体类的类型。因此,当您在日志中看到抽象类时,这是写入日志的位置,但为记录器提供名称的真正类是某个子类。
我建议你尝试更改所有日志的模式,然后它将打印真实记录器名称(这是子类)的名称

关于java - 重定向来自从父级继承 Logger 的抽象子类的记录器消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55939049/

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