and*_*ewz 19 java logging java.util.logging
我正在尝试在java.util.logging中使用默认记录器时抑制日期行durinng日志记录的输出.例如,这是一个典型的输出:
Jun 1, 2010 10:18:12 AM gamma.utility.application info
INFO: ping: db-time=2010-06-01 10:18:12.0, local-time=20100601t101812, duration=180000
Jun 1, 2010 10:21:12 AM gamma.utility.application info
INFO: ping: db-time=2010-06-01 10:21:12.0, local-time=20100601t102112, duration=180000
我想摆脱Jun 1, 2010...线条,它们只是混乱了我的日志输出.我怎样才能做到这一点?
Dem*_*sto 32
从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.
and*_*ewz 13
该问题是由父日志中的处理程序引起的.解决方案是从父日志中删除所有处理程序,然后添加自己的自定义处理程序.此代码从父日志中删除处理程序:
for(Handler iHandler:log.getParent().getHandlers())
{
log.getParent().removeHandler(iHandler);
}
编写自定义格式化程序扩展java.util.logging.Formatter类,并String format(LogRecord)根据您的需要实现该方法.例如,以下格式化程序仅显示日志消息(如果正在记录异常,则显示可抛出的堆栈跟踪):
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是你如何使用它:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30662 次 |
| 最近记录: |