Java 我的日志记录到哪里去了?
我有一个bean,它通过一个静态块实例化一个模式,以便为MyClass的每个实例加载一次。但是,我从未看到日志记录(只有在输入错误的文件路径时才看到一次,因此这是异常记录)。如果我用Java 我的日志记录到哪里去了?,java,logging,log4j,slf4j,Java,Logging,Log4j,Slf4j,我有一个bean,它通过一个静态块实例化一个模式,以便为MyClass的每个实例加载一次。但是,我从未看到日志记录(只有在输入错误的文件路径时才看到一次,因此这是异常记录)。如果我用System.out.println()替换日志记录,它将显示在控制台中 我的项目使用SLF4J和LOG4J。我看到了这个问题:它声称LOG4J应该在执行静态块时被初始化。我的直觉是,通过使用SLF4J,这不再是保证。对吗 private static final Logger LOGGER = LoggerFact
System.out.println()替换日志记录,它将显示在控制台中
我的项目使用SLF4J和LOG4J。我看到了这个问题:它声称LOG4J应该在执行静态块时被初始化。我的直觉是,通过使用SLF4J,这不再是保证。对吗
private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
private static Schema XSD_SCHEMA = null;
static {
// NB The logging in this static block does not always appear in the output. It seems
// that the indirection between SLF4J and LOG4J causes slow initialization of the logging
// framework.
if (XSD_SCHEMA != null) {
LOGGER.info("Reading schema...");
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = null;
try {
schema = sf.newSchema(new File("some.xsd"));
LOGGER.info("Read schema successfully, using validation...");
} catch (SAXException e) {
LOGGER.error("Could not load validation schema, not using validation (Reason {})",
e);
}
XSD_SCHEMA = schema;
}
}
只需省略这个if语句
if (XSD_SCHEMA != null) {
事实上,它总是错误的,静态块从不执行任何有用的操作
您不需要它,因为静态块无论如何只执行一次。如果未初始化LOGGER
,您将得到NullPointerException
。