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

Java 如何以编程方式禁用控制台的Logback输出,但附加到文件,java,logging,logback,Java,Logging,Logback,我以编程方式设置了Logback文件appender,并将日志级别设置为ALL。 原因是设置日志级别ALL我希望日志文件包含所有日志详细信息,如(信息、调试、警告等),但我希望避免从控制台获取这些详细信息。如果有人知道,请让我知道如何以编程方式禁用控制台的回写输出 记录器代码片段 专用静态记录器createLoggerFor(字符串、字符串文件){ LoggerContext lc=(LoggerContext)LoggerFactory.getILoggerFactory(); Patter

我以编程方式设置了Logback文件appender,并将日志级别设置为
ALL
。 原因是设置日志级别
ALL
我希望日志文件包含所有日志详细信息,如
(信息、调试、警告等)
,但我希望避免从控制台获取这些详细信息。如果有人知道,请让我知道如何以编程方式禁用控制台的回写输出

记录器代码片段

专用静态记录器createLoggerFor(字符串、字符串文件){
LoggerContext lc=(LoggerContext)LoggerFactory.getILoggerFactory();
PatternLayoutCoder ple=新的PatternLayoutCoder();
setPattern(“%date%级别[%thread]%logger{10}[%file:%line]%msg%n”);
ple.setContext(lc);
ple.start();
FileAppender FileAppender=新FileAppender();
fileAppender.setFile(文件);
fileAppender.setEncoder(ple);
setContext(lc);
fileAppender.start();
Logger Logger=(Logger)LoggerFactory.getLogger(字符串);
logger.addAppender(fileAppender);
logger.setLevel(Level.ALL);
logger.setadditional(false);/*如果root也应该记录,则设置为true*/
返回记录器;
}
注意:当我设置日志级别时,
警告
调试
详细信息不会显示在日志文件中,也不会显示在控制台输出中。但我想将所有详细信息都记录到日志文件中,包括
信息
,这对我很有效

logger.setAdditivity(false);
这对我有用

logger.setAdditivity(false);
从文档中:

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

如果要禁用所有控制台输出,应尝试删除默认的ConsolePender。根据,这个appender的名字是“console”。因此,您可以尝试(未经测试):

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

来自文档:

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

如果要禁用所有控制台输出,应尝试删除默认的ConsolePender。根据,这个appender的名字是“console”。因此,您可以尝试(未经测试):


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

您可以通过从您的logback配置中删除
ConsoleAppender来实现这一点

日志恢复配置如下所示

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

c:/logs/serverlog.log
符合事实的
%d[%thread]-5级别%logger{35}-%msg%n

您可以通过从您的logback配置中删除
ConsoleAppender来完成此操作

日志恢复配置如下所示

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

c:/logs/serverlog.log
符合事实的
%d[%thread]-5级别%logger{35}-%msg%n

这不起作用。作为临时解决方案,我在项目中添加了一个虚拟
lockback.xml
文件,并覆盖默认行为。我的logback xml只包含以下xml标记:
这不是一种优雅的方式,但它成功了。这不起作用。作为临时解决方案,我添加了一个虚拟
lockback.xml
文件到我的项目中并覆盖默认行为。我的logback xml只包含以下xml标记:
,这不是一种优雅的方式,但它做到了。我不确定上述内容是否正确,或者在给出答案后是否有变,但我今天遇到了这个问题,至少从logback版本1.2.3开始,正确的形式是
logger.setaddition(false)
(这对我来说也很有效)我不确定上述内容是否正确,或者在给出答案后是否发生了变化,但我今天遇到了这种情况,至少在Logback版本1.2.3中,正确的形式是
logger.setaddition(false)(对我来说也很有效)