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

时间:2016-11-07 08:23:46

标签: java logging logback

我以编程方式设置了Logback file appender,并将日志级别设置为ALL。 原因是设置日志级别ALL我希望日志文件包含所有日志详细信息,如(INFO,DEBUG,WARN and etc...)但我想从控制台中避免这些细节。如果有人知道请告诉我如何禁用Logback以编程方式输出到控制台。

记录器代码段

Reference

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;
    }

注意:当我设置日志级别WARNDEBUG时,详细信息并未显示在日志文件中以及控制台输出。但我想记录每个详细信息记录包含INFO的文件。

3 个答案:

答案 0 :(得分:1)

这对我有用

logger.setAdditivity(false);

答案 1 :(得分:1)

来自文档:

  

假设配置文件是logback-test.xml或logback.xml   不存在,logback将默认调用BasicConfigurator   将设置最小配置。这个最小的配置   由连接到根记录器的ConsoleAppender组成。

如果要禁用所有控制台输出,则应尝试删除默认的ConsoleAppender。根据{{​​3}},这个appender的名字是“console”。所以你可以尝试(未经测试):

logger.detachAppender("console");

我强烈建议将这些编程配置移动到logback.xml文件中,并且只在必要时以编程方式更改配置。在我看来,配置文件更明确,更容易管理。

答案 2 :(得分:0)

您可以通过删除ConsoleAppenderfrom您的logback配置来完成此操作。

回溯配置如下。

<configuration>

<appender name="logFileAppender" class="ch.qos.logback.core.FileAppender">
<file>c:/logs/serverlog.log</file>
<append>true</append>
  <encoder>
    <pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
  </encoder>
</appender>

<root level="INFO">
 <appender-ref ref="logFileAppender" />
</root>

</configuration>