我想更改日志的格式但是在我重写格式化程序之后,它仍然以旧方式输出。
private void initializeLogger() {
logger = Logger.getLogger("gameLogger");
try {
Handler handler = new FileHandler("/home/bobby/IdeaProjects/GoFishBobby/src/logs/log1.txt");
MyFormatter myFormatter = new MyFormatter();
handler.setFormatter(myFormatter);
logger.addHandler(handler);
for (Handler parentHandler : logger.getParent().getHandlers())
logger.removeHandler(parentHandler);
}catch(IOException e){
System.out.println("IO exception");
}
logger.info("Game starting : ");
}
我覆盖了默认的loggerFormatter
public class MyFormatter extends Formatter{
public String format(LogRecord record){
return record.getMessage();
}
}
并且输出仍然包含信息行以及我不需要的信息
SEVERE: NativePlayer : 0 Scored A Book of rank 3
Mar 05, 2017 1:15:44 PM Game logAfterPlay
INFO: The transfer hand is:
4D 4H 4S
我刚刚发现文件中的日志是正确的,但为什么它在控制台上仍然像这样?如何在控制台上摆脱它。我已经删除了所有父记录器。
答案 0 :(得分:0)
您可以使用以下方法查找所有处理程序,以遍历所有当前创建的记录器。
public static void printLoggerTree() {
final LogManager manager = LogManager.getLogManager();
synchronized (manager) {
final Enumeration<String> e = manager.getLoggerNames();
while (e.hasMoreElements()) {
final Logger l = manager.getLogger(e.nextElement());
if (l != null) {
for (Handler h : l.getHandlers()) {
System.out.println(l.getName() + "=" + h);
}
}
}
}
}
当代码的不同部分请求新记录器时,记录器树会随时间而变化。所以当你调用这个方法时很重要。
更好的做法是设置自己的logging.properties文件,并将项目配置为在启动时使用该文件。您也不需要在命令行上change the format pattern of the SimpleFormater创建自己的格式化程序,使用以下命令:
-Djava.util.logging.SimpleFormatter.format="%5$s%n"