【发布时间】:2020-09-30 01:01:56
【问题描述】:
我无法在我的构造函数中一些打印日志。与其他人一样,日志记录的工作方式与我预期的一样。
我试图通过使用默认值以及在类本身中明确设置日志级别来消除所有可能的混淆来源。我尝试将记录器实例化为静态变量和实例变量。
但是,即使将日志记录级别设置为“Level.ALL”,在某些类中似乎也不起作用。
例如记录器,我一直在 instance-initializer / 匿名 block 中设置日志记录级别。对于静态实例,我使用静态块来设置日志记录级别。
知道为什么日志消息没有在下面的类中打印出来吗?
注意:已根据@jmehrens 的评论对代码进行了编辑以显示修复
public abstract class ReadFileInformation extends SimpleFileVisitor<Path> {
static public ConsoleHandler globalConsoleHandler = new ConsoleHandler(); // fix, based on comment by @jmehrens
static private final Logger logger = Logger.getLogger(ReadFileInformation.class.getName());
static { // fix: See comment by @jmehrens
globalConsoleHandler.setLevel(Level.ALL);
logger.addHandler(globalConsoleHandler);
}
{
logger.setLevel(Level.ALL);
logger.log(Level.FINEST, String.format("This does NOT print.\n"));
System.out.println("In ReadFileInformation Static Block. This prints out!");
}
}
public class ReadMetadateFileInformation extends ReadFileInformation {
static private final Logger logger = Logger.getLogger(ReadMetadateFileInformation.class.getName());
static {
logger.setLevel(Level.ALL);
logger.log(Level.FINEST, String.format("This does NOT print.\n"));
System.out.println("In ReadMetadateFileInformation Static Block. This prints out!");
}
{
logger.log(Level.FINEST, String.format("This does NOT print.\n"));
System.out.println("In ReadMetadateFileInformation Anonymous Block. This prints out!");
}
public ReadMetadateFileInformation() {
super();
logger.log(Level.FINE, String.format("This does NOT print.\n"));
}
}
【问题讨论】:
-
System.out.printing 与Logger无关。我也猜测这也与子类化无关 - 基本上(作为发布的代码)与Log无关,我建议您使用main制作一个非常简单的类,以便打印。 -
添加 System.out.print 的唯一目的是向自己证明代码实际上已经到达了代码中的那个点,然后忽略了日志记录语句。正如@jmehrens 所建议的那样,添加 ConsoleHandler 确实成功了!
标签: java logging java.util.logging