我正在使用的应用程序只在NetBeans自动生成的catch
块中进行日志调用,而没有其他类型的日志记录:
Logger.getLogger(SomeClass.class.getName()).log(Level.SEVERE, null, ex);
应该采取哪些步骤将日志输出从控制台重定向到例如文本文件?
我读过Lars Vogel tutoriral http://www.vogella.com/tutorials/Logging/article.html并且大部分都了解他在做什么,但显然当他想记录一个事件时,他会从他自己的记录器的实例中调用一个方法{{1} }。
NetBeans开发人员可能打算按原因自动生成日志调用。他们的日志记录是否必须像教程中那样被替换,还是可以简单地配置为使用另一个日志记录目的地?
我的困惑源于LOGGER
是静态方法的事实。
答案 0 :(得分:0)
应该采取哪些步骤将日志输出从控制台重定向到例如文本文件?
来自Java Logging Overview Examples:
public static void main(String[] args) {
Handler fh = new FileHandler("%t/wombat.log");
Logger.getLogger("").addHandler(fh);
Logger.getLogger("com.wombat").setLevel(Level.FINEST);
...
}
该示例在临时目录中创建一个wombat.log文件。
否则,您可以修改或指定logging.properties条目以安装FileHandler。这是< lib / logging.properties'的修改条目。位于Java主目录中。
############################################################
# Global properties
############################################################
# "handlers" specifies a comma separated list of log Handler
# classes. These handlers will be installed during VM startup.
# Note that these classes must be on the system classpath.
# By default we only configure a ConsoleHandler, which will only
# show messages at the INFO and above levels.
#
#handlers= java.util.logging.ConsoleHandler
# To also add the FileHandler, use the following line instead.
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
您可以使用' java.util.logging.config.file'启动时的系统属性,用于指定备用日志配置文件。
如果getLogger()是一个静态方法,它在没有创建Logger类的实例的情况下执行,
包含在上面列出的Java Logging Overview中,有一个指向Java SE API Specification的链接。这是所有这些工作的合同。
如果您查找Logger.getLogger,您会看到:
查找或创建指定子系统的记录器。如果已使用给定名称创建了记录器,则返回该记录器。否则,将创建一个新的记录器。 如果创建了新的记录器,则将根据LogManager配置配置其日志级别,并将其配置为还将日志记录输出发送到其父级处理程序。它将在LogManager全局命名空间中注册。
getLogger方法正在创建或定位记录器。
比addHandler()在哪里保留其结果?
处理程序存储在记录器实例上。输出类型取决于处理程序。 API规范中描述了每个处理程序的属性。
The Logging Hierarchy and Record Forwarding可能会帮助您了解示例代码中发生的情况。