如何以编程方式禁用 Logback 输出到控制台但附加到文件

gih*_*han 3 java logging logback

我以编程方式设置了 Logback 文件附加器,并将日志级别设置为ALL. 原因是设置日志级别,ALL我想记录文件包含所有日志详细信息,例如(INFO,DEBUG,WARN and etc...)但我想避免来自控制台的这些详细信息。如果有人知道,请让我知道如何以编程方式禁用 Logback 输出到控制台。

记录器代码片段

参考

private static Logger createLoggerFor(String string, String file) {
          LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
          PatternLayoutEncoder ple = new PatternLayoutEncoder();

          ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
          ple.setContext(lc);
          ple.start();
          FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
          fileAppender.setFile(file);
          fileAppender.setEncoder(ple);
          fileAppender.setContext(lc);
          fileAppender.start();

          Logger logger = (Logger) LoggerFactory.getLogger(string);
          logger.addAppender(fileAppender);
          logger.setLevel(Level.ALL);
          logger.setAdditive(false); /* set to true if root should log too */

          return logger;
    }
Run Code Online (Sandbox Code Playgroud)

注意:当我设置日志级别WARNDEBUG详细信息时,日志文件以及控制台输出中不会显示。但我想将所有详细信息记录到日志文件中,包括INFO.

Kyl*_*Vay 5

来自文档:

假设配置文件 logback-test.xml 或 logback.xml 不存在,logback 将默认调用 BasicConfigurator 来设置最小配置。此最小配置由附加到根记录器的 ConsoleAppender 组成。

如果您想禁用所有控制台输出,您应该尝试删除默认的 ConsoleAppender。根据BasicConfigurator 来源,该附加程序的名称是“console”。所以你可以尝试(未经测试):

logger.detachAppender("console");
Run Code Online (Sandbox Code Playgroud)

我强烈建议将这些编程配置移至 logback.xml 文件中,并且仅在必要时以编程方式更改配置。我认为配置文件更明确且更易于管理。