【问题标题】:Disabling awt/swing debug (fine) log messages禁用 awt/swing 调试(精细)日志消息
【发布时间】:2011-05-17 10:24:58
【问题描述】:

我正在使用 java 日志记录将我的应用程序的日志消息写入日志文件和其他目标。将日志级别设置为FINE 后,我还收到了来自 AWT/Swing 的(不需要的)消息,例如:

{0}, when grabbed {1}, contains {2}

和其他人。查看 JDK 源代码(参见例如here),可以看到相应记录器的名称为sun.awt.X11.grab.XWindowPeer

我从 Java 日志框架中了解到,这个日志处理程序应该从其父级继承其日志级别,例如 sun.awt

我尝试了以下方法:

Logger.getLogger("sun.awt").setLevel(Level.OFF);

但 AWT/Swing 调试消息仍出现在日志输出中。

以编程方式禁用这些日志消息的推荐方法是什么(同时仍允许来自其他来源的 FINE 消息)?

【问题讨论】:

  • 请更新您的问题以显示您如何获取记录器实例以及如何调用它。

标签: java swing logging awt


【解决方案1】:

如果您只想记录您自己的应用程序的消息,您可以禁用所有消息,然后为您的应用程序显式启用消息:

Logger.getRootLogger().setLevel(Level.OFF);
Logger.getLogger("package.of.your.application").setLevel(Level.ALL);

在用于记录的属性文件(例如 logging.properties)中,这将是:

.level = OFF
package.of.your.application.level = ALL

【讨论】:

    【解决方案2】:

    我今天也遇到了同样的问题。在谷歌上搜索这是最重要的网址,我没有找到一个好的答案来源,所以我会发布我的:)

    假设 Andre 使用 java.util.logging API,则可以使用 setFormatter(Formatter newFormatter) 添加一个 Handler 来控制您的日志格式。

    所以我扩展了Formatter 并检查了日志的类是否包含java.awt、javax.swing 或sun.awt。

    class MyFormatLog extends Formatter {
    
        @Override
        public String format(LogRecord record) {
            if( !record.getSourceClassName().contains("java.awt") &&
            !record.getSourceClassName().contains("javax.swing.") &&
            !record.getSourceClassName().contains("sun.awt.") ) {
              //format my output...
            } else {
              return "";
            }
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      我再也找不到 Logger 类中的 getRootLogger() 方法了。这对我有用:

      logger = Logger.getLogger("my.package");
      Logger l = logger;
      while (l != null) {
          l.setLevel(Level.OFF);
          l = l.getParent();
      }            
      logger.setLevel(Level.FINER);
      

      【讨论】:

        【解决方案4】:
            Logger.getLogger("java.awt").setLevel(Level.OFF);
            Logger.getLogger("sun.awt").setLevel(Level.OFF);
            Logger.getLogger("javax.swing").setLevel(Level.OFF);
        

        【讨论】:

          【解决方案5】:

          试试 Logger.getRootLogger().setLevel(Level.OFF);

          【讨论】:

            猜你喜欢
            • 2016-05-29
            • 2014-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-14
            • 1970-01-01
            • 2015-05-21
            相关资源
            最近更新 更多