java - slf4j/log4j : disabling console output when console is inappropriate

标签 java console log4j slf4j

我正在使用 ProcessBuilder 以编程方式启动 JVM .为清楚起见,我们将使用 ProcessBuilder 的 JVM 称为 JVM A,将其启动的 JVM B 称为 JVM B。JVM B 使用 slf4j/log4j 进行日志记录。

这里的问题是我在 JVM B 中执行的类是我有时在调试器中运行的类,在调试器中有控制台输出会很有帮助。

但是,如果我使用 ProcessBuilder 运行 JVM B,那么我想要控制台输出,因为这需要 JVM A 读取进程的输出或 JVM B 挂起。

有没有办法从 JVM B 中控制 slf4j 或 log4j,这样如果我在 JVM 中的主类认为使用控制台进行日志记录是不合适的,它就不会尝试这样做? (例如,它禁用基于控制台的附加程序)我宁愿不必维护单独的 log4j.configuration 文件,尽管如果需要我会这样做。

例如在我的主课上

static {
   if (shouldntUseConsole())
   {
      ?????
   }
}

我知道如何实现 shouldntUseConsole(),但我不知道要为 ????? 添加什么。

最佳答案

首先,slf4j是一个API,背后有一个实现,这里是log4j所以是你需要配置的实现,而不是slf4j。

拥有不同日志记录行为的通常方法是拥有不同的配置文件。对于 log4j,您可以为 A 和 B 使用不同的文件集,使用两个不同的 log4j.properties 文件,或者您可以让一个配置将“log4j.configuration”系统属性设置为另一个配置文件的名称。

参见 http://logging.apache.org/log4j/1.2/manual.html 中的“默认初始化过程”部分了解详情。

关于java - slf4j/log4j : disabling console output when console is inappropriate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718845/

相关文章:

java - 如何创建动态 JList?

java - 带有复选框的无效结果

c - 在 C : 中限制控制台输入长度

javascript - utag.DB 是什么意思?

java - Log4j - 根据项目模块记录到多个日志文件

logging - 监控负载下的 log4j 行为

Java UncaughtExceptionHandler + LOG4J + Maven

java - 如何从数组列表中删除多余的空格

java - 如何获取 OSGi 使用的所有 jar 路径?

delphi - 如何在 Delphi 控制台应用程序中处理 Ctrl+C?