Java 禁用awt/swing调试(精细)日志消息
我使用java日志将应用程序的日志消息写入日志文件和其他目的地。将日志级别设置为Java 禁用awt/swing调试(精细)日志消息,java,swing,logging,awt,Java,Swing,Logging,Awt,我使用java日志将应用程序的日志消息写入日志文件和其他目的地。将日志级别设置为FINE,我还从AWT/Swing获得(不需要的)消息,例如: {0}, when grabbed {1}, contains {2} 等等。查看JDK源代码(参见示例),可以看到相应记录器的名称是sun.awt.X11.grab.XWindowPeer 我从Java日志框架中了解到,这个日志处理程序应该从其父级继承其日志级别,如sun.awt 我尝试了以下方法: Logger.getLogger("sun.awt
FINE
,我还从AWT/Swing获得(不需要的)消息,例如:
{0}, when grabbed {1}, contains {2}
等等。查看JDK源代码(参见示例),可以看到相应记录器的名称是sun.awt.X11.grab.XWindowPeer
我从Java日志框架中了解到,这个日志处理程序应该从其父级继承其日志级别,如sun.awt
我尝试了以下方法:
Logger.getLogger("sun.awt").setLevel(Level.OFF);
但是AWT/Swing调试消息仍然显示在日志输出中
以编程方式禁用这些日志消息(同时仍然允许来自其他来源的FINE
消息)的建议方法是什么
Logger.getRootLogger().setLevel(Level.OFF) 我今天也有同样的问题。在谷歌上搜索这是最热门的url,我没有找到一个好的答案来源,所以我会发布我的:) 假设Andre使用
java.util.logging
API,可以使用setFormatter(Formatter newFormatter)
添加控制日志格式的处理程序
因此,我扩展了格式化程序,并检查日志类是否包含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 "";
}
}
}
如果您只想记录自己应用程序的消息,可以禁用所有消息,然后显式启用应用程序的消息:
Logger.getRootLogger().setLevel(Level.OFF);
Logger.getLogger("package.of.your.application").setLevel(Level.ALL);
在用于日志记录的属性文件(例如logging.properties)中,这将是:
.level = OFF
package.of.your.application.level = ALL
我在Logger类中再也找不到getRootLogger()方法。这对我来说很有用:
logger = Logger.getLogger("my.package");
Logger l = logger;
while (l != null) {
l.setLevel(Level.OFF);
l = l.getParent();
}
logger.setLevel(Level.FINER);
请更新您的问题,以显示您是如何获取记录器实例以及如何调用它的。
Logger.getLogger("java.awt").setLevel(Level.OFF);
Logger.getLogger("sun.awt").setLevel(Level.OFF);
Logger.getLogger("javax.swing").setLevel(Level.OFF);