在java.logging模块中,是java的日志记录有关的类。记录日志,涉及到日志的级别,即level。其实,在Logger和Handler中都分别有日志级别控制,两者不同。Logger中的日志级别控制的是Logger能记录什么级别的日志,而Handler中的日志级别控制Handler会处理什么级别的日志。
Logger API中设置日志级别的说明:
Handler API设置日志级别的说明:
不同的Handler,默认的日志级别是不同的,例如java.util.logging.FileHandler默认日志级别是Level.ALL,而java.util.logging.ConsoleHandler默认日志级别是Level.INFO。
下面用代码验证下:
package com.thb.hellomaven;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class LogDemo {
public static void main(String[] args) {
Handler fh;
try {
String pathStr = "d:\\temp\\log\\thb.log";
fh = new FileHandler(pathStr);
Logger.getLogger("").addHandler(fh);
Logger.getLogger("com.thb.hellomaven.LogDemo").setLevel(Level.FINEST);
//Logger.getLogger("com.thb.hellomaven.LogDemo").setLevel(Level.WARNING);
Logger logger = Logger.getLogger("com.thb.hellomaven.LogDemo");
logger.fine("fine level message");
logger.info("info level message");
System.out.println(logger.getName() + " level = " + logger.getLevel());
for(Handler handler : Logger.getLogger("").getHandlers()) {
System.out.println(handler + ", level = " + handler.getLevel());
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码中Logger.getLogger(“com.thb.hellomaven.LogDemo”).setLevel(Level.FINEST);就是设置这个Logger可以记录最低级别及以上的日志。
logger.fine(“fine level message”);和logger.info(“info level message”);分别输出了两个级别的日志。
控制台输出内容:
可以看出,控制台只输出了INFO基本的日志(对应java.util.logging.ConsoleHandler输出的日志)。
日志文件D:\temp\log\thb.log中的内容(对应java.util.logging.FileHandler的输出),两个级别的日志都输出了: