我有一个简单的记录程序,即:
public class LoggingExample1 {
public static void main(String args[]) {
try {
LogManager lm = LogManager.getLogManager();
Logger logger;
FileHandler fh = new FileHandler("log_test.txt");
logger = Logger.getLogger("LoggingExample1");
lm.addLogger(logger);
logger.setLevel(Level.INFO);
fh.setFormatter(new SimpleFormatter());
logger.addHandler(fh);
// root logger defaults to SimpleFormatter. We don't want messages
// logged twice.
//logger.setUseParentHandlers(false);
logger.log(Level.INFO, "test 1");
logger.log(Level.INFO, "test 2");
logger.log(Level.INFO, "test 3");
fh.close();
} catch (Exception e) {
System.out.println("Exception thrown: " + e);
e.printStackTrace();
}
}
}
我得到这个日志:
Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 1
Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 2
Aug 1, 2011 5:36:37 PM LoggingExample1 main
INFO: test 3
但我想删除以下消息:LoggingExample1 main和INFO 并且只保留代码记录的数据。 我该怎么办???
答案 0 :(得分:6)
这是因为您使用SimpleFormatter
始终记录类名,方法名等。如果您不想要此信息,可以编写自己的格式化程序。下面是一个简单的格式化示例,它只输出日志级别和日志消息:
import java.util.logging.*;
class MyFormatter extends Formatter{
/* (non-Javadoc)
* @see java.util.logging.Formatter#format(java.util.logging.LogRecord)
*/
@Override
public String format(LogRecord record) {
StringBuilder sb = new StringBuilder();
sb.append(record.getLevel()).append(':');
sb.append(record.getMessage()).append('\n');
return sb.toString();
}
}
在文件处理程序中使用此格式化程序:
fh.setFormatter(new MyFormatter());
这将输出:
INFO:test 1
INFO:test 2
INFO:test 3
答案 1 :(得分:2)
使用格式化程序类扩展您的类,如下所示:
public class MyFormatter extends SimpleFormatter{
@Override
public synchronized String format(LogRecord record){
record.setSourceClassName(MyFormatter.class .getName());
return String.format(
" [%1$s] :%2$s\n",
record.getLevel().getName(), formatMessage(record));
}
}
然后在您的主类中,将console handler和filehandler格式设置为类格式对象。 就我而言,它是consoleHandler.format(new MyFormatter); filehandler.format(new Myformatter);
最重要的是你必须设置 logger.setUseParentHandler(假);
现在你很高兴!
答案 2 :(得分:0)
如果我理解正确,您想删除INFO
并且只有test 1
等等?
如果是这种情况,我认为不可能。原因是你需要知道这是什么类型的消息。
ERROR
WARNING
INFO
DEBUG
TRACE
如果需要,您可以将级别更改为仅显示“警告”和“向上”。
答案 3 :(得分:0)
这是我如何做到这一点,简化版的SimpleFormatter
package org.nibor.git_merge_repos;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
public class CustomLogFormatter extends Formatter {
private final Date dat = new Date();
private static final String seperator = " : ";
public synchronized String format(LogRecord record) {
dat.setTime(record.getMillis());
return dat + seperator + record.getLevel().getName() + seperator + record.getMessage() + "\n";
}
}