java.util.logging:如何压制日期行

我正在尝试在java.util.logging中使用默认记录器时抑制日期行durinng日志记录的输出。 例如,这是一个典型的输出:

 2010年6月1日10:18:12 gamma.utility.application info

信息:ping:db-time = 2010-06-01 10:18:12.0,local-time = 20100601t101812,duration = 180000
2010年6月1日10:21:12 gamma.utility.application info
信息:ping:db-time = 2010-06-01 10:21:12.0,local-time = 20100601t102112,duration = 180000

我想摆脱Jun 1, 2010...行,他们只是弄乱了我的日志输出。 我怎样才能做到这一点?

从Java SE 7开始,有一个新的系统属性: java.util.logging.SimpleFormatter.format

java.util.logging属性文件(logging.properties)上也可以配置相同的属性。 如果您是Eclipse用户,并且您对控制台输出中的双线消息感到恼火,则可以通过以下方式更改jre logging.properties文件(JDK_HOME / jre / lib / logging.properties):

java.util.logging.SimpleFormatter.format =%4 $ s:%5 $ s [%1 $ tc]%n

这里提供了一些示例格式: http : //docs.oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html 。

该问题是由父日志中的处理程序引起的。 解决方案是从父日志中删除所有处理程序,然后添加自己的自定义处理程序。 此代码从父日志中删除处理程序:

       for(Handler iHandler:log.getParent()。getHandlers())
         {
         。log.getParent()removeHandler(iHandler);
         }

编写一个自定义格式化程序,扩展java.util.logging.Formatter类,并根据需要实现String format(LogRecord)方法。 例如,以下格式化程序仅显示日志消息(如果正在记录exception,则显示throwable stacktrace):

 import java.io.PrintWriter; import java.io.StringWriter; import java.util.logging.Formatter; import java.util.logging.LogRecord; class CustomRecordFormatter extends Formatter { @Override public String format(final LogRecord r) { StringBuilder sb = new StringBuilder(); sb.append(formatMessage(r)).append(System.getProperty("line.separator")); if (null != r.getThrown()) { sb.append("Throwable occurred: "); //$NON-NLS-1$ Throwable t = r.getThrown(); PrintWriter pw = null; try { StringWriter sw = new StringWriter(); pw = new PrintWriter(sw); t.printStackTrace(pw); sb.append(sw.toString()); } finally { if (pw != null) { try { pw.close(); } catch (Exception e) { // ignore } } } } return sb.toString(); } } 

这是你如何使用它:

 import java.util.logging.ConsoleHandler; import java.util.logging.Logger; class A { private static final Logger LOGGER = Logger.getLogger(A.class.getName()); static { CustomRecordFormatter formatter = new CustomRecordFormatter(); ConsoleHandler consoleHandler = new ConsoleHandler(); consoleHandler.setFormatter(formatter); LOGGER.addHandler(consoleHandler); } public void doSomething() { LOGGER.info("something happened"); } }