【问题标题】:Java Logger only to file, no screen outputJava Logger 仅用于文件,无屏幕输出
【发布时间】:2017-10-03 02:07:21
【问题描述】:

我有一个非常简单的问题,但找不到解决方案。 我有一个添加了文件处理程序的记录器,但它仍然从我的控制台中发送垃圾邮件。 我怎样才能让记录器将所有输出单独路由到一个文件,没有控制台输出?

【问题讨论】:

  • 感叹号让这个问题看起来很刺激。
  • 哪个日志框架?

标签: java logging


【解决方案1】:

老问题,但为了帮助其他开发人员:

您也可以在您的记录器上使用logger.setUseParentHandlers(false)

【讨论】:

  • 比任何其他答案都容易得多。
  • 这是最新最简单最有效的答案。
【解决方案2】:

保证不会向控制台写入任何内容的最简单方法是放置:

java.util.logging.ConsoleHandler.level = NONE

在您的日志记录配置文件中。

【讨论】:

    【解决方案3】:

    在添加文件处理程序之前,从根记录器中删除所有处理程序(使用 Logger.getHandlers() 并为每个处理程序调用 Logger.removeHandler())。

    【讨论】:

    • Logger.getHandlers() 在我的情况下返回 0 处理程序
    • 当我添加 FileHandler 时,处理程序大小变为 1
    【解决方案4】:

    将 log4j 与

    一起使用
    import org.apache.log4j.Logger;
    
    Logger logger = Logger.getLogger("com.whatever");
    PropertyConfigurator.configure("file-log4j.properties");
    

    并在 file-log4j.properties 中设置显示级别:

    # Root logger option
    log4j.rootLogger=INFO, file
    
    # Direct log messages to a log file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=index-service.log
    log4j.appender.file.MaxFileSize=1MB
    log4j.appender.file.MaxBackupIndex=1
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    log4j.appender.file.Append=false
    

    【讨论】:

      【解决方案5】:

      我用:

      Logger logger = Logger.getLogger("MyLog");
          Logger parentLog= logger.getParent();
          if (parentLog!=null&&parentLog.getHandlers().length>0) parentLog.removeHandler(parentLog.getHandlers()[0]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 2023-03-11
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多