一、基本日志
使用全局日志记录器(global logger),调用info方法:
public static void baseLog(){
Logger.getGlobal().info("File->Open menu item selected.");
}
将在控制台打印如下内容:
二、高级日志(企业级)
在专业的应用程序中,不要将所有的日志都记录在一个全局日志记录器中,可以自定义日志记录器:
未被任何变量引用的日志记录器可能会被垃圾回收,所以用一个静态变量存储日志记录器的一个引用。
private static final Logger myLogger = Logger.getLogger("exceptions.logging");
日志记录其有层次结构:如果对com.mycompany日志记录器设置了日志级别,它的子记录器也会继承这个级别。
2.1 七个日志记录器级别
- SEVERE
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST
默认只记录前三个级别:SEVERE、WARNING、INFO。
2.2 设置日志级别
myLogger.setLevel(Level.CONFIG);
这样就设置了日志级别,但要想在控制台看到(日志记录器默认将记录发送给控制台处理器ConsoleHandler),还要修改日志管理配置:jre\lib\logging.properties
比如:F:\Java\jdk1.8.0_191\jre\lib\logging.properties
2.3 使用其他的配置文件
使用如下命令运行:
三、日志处理器
默认情况下,日志记录器将记录发送给ConsoleHandler中。和日志记录器一样,处理器也有日志记录级别。控制台处理器的默认日志记录级别为:
java.util.logging.ConsoleHandler.level = INFO
要改变处理器的日志记录级别,除了修改配置文件外,还可以安装自己的处理器,绕过配置文件:
public class LogTest {
// industrial-strength log
private static final Logger myLogger = Logger.getLogger("exceptions.logging");
public static void main(String[] args) {
//baseLog();
myLogger.setLevel(Level.FINER);
finerLog();
logHandler(Level.FINER);
finerLog();
}
public static void finerLog(){
myLogger.finer("finer log...");
}
public static void logHandler(Level lev){
myLogger.setUseParentHandlers(false);
Handler handler = new ConsoleHandler();
handler.setLevel(lev);
myLogger.addHandler(handler);
}
}
此时会打印:
注意,如果不设置myLogger.setUseParentHandlers(false); 那么可能打印出两条相同的记录。因为日志记录器会将记录发送到自定义的处理器(自定义处理器是原始处理器的子类)和原始处理器,而原始处理器会将记录发送到控制台,如果原始记录器的日志记录级别达到了,也会记录一条和自定义处理器记录一样的日志。
public static void main(String[] args) {
myLogger.setLevel(Level.FINER);
logHandler(Level.FINER);
configLog();
}
public static void configLog(){
myLogger.config("config log...");
}
public static void logHandler(Level lev){
// myLogger.setUseParentHandlers(false);
Handler handler = new ConsoleHandler();
handler.setLevel(lev);
myLogger.addHandler(handler);
}
将打印出两条相同的日志:
除了控制台处理器(ConsoleHandler)外,还有文件处理器(FileHandler)和插槽处理器(SocketHandler)。FileHandler可以将日志写入到文件中,SocketHandler可以将日志发送到特定的主机和端口。