关于java的日志,我们有很多种,常见的有commons-loging、log4j、slf4j等,实际上jdk本身带有一套日志java.util.logging.Logger。现在对这些日志的用法做一个小总结。
一、jdk自带的日志管理类
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
/**
* java自带日志管理
* @author Walter.Huang
* @create date 2014-12-15
*/
public class LogMain {
public static void main(String[] args) throws Exception {
Logger log1=Logger.getLogger("javaLog");
Logger log2=Logger.getLogger("javaLog");
System.out.println(log1==log2); //同名日志获取到的对象为同一个,故打印“true”
log2=Logger.getLogger("javaLog2");//重置一个
/*
日志级别,使用Level类承载,从高到低依次是:SEVERE(最高值)、WARNING、INFO、CONFIG、FINE、FINER、FINEST(最低值)
此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。
logger默认的级别是INFO,比INFO更低的日志将不显示。
*/
log1.setLevel(Level.INFO);
/*
Handler 对象从 Logger 中获取日志信息,并将这些信息导出。
例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。
可通过执行 setLevel(Level.OFF) 来禁用 Handler,并可通过执行适当级别的 setLevel 来重新启用。
Handler 类通常使用 LogManager 属性来设置 Handler 的 Filter、Formatter 和 Level 的默认值。
java.util.logging.Handler
java.util.logging.MemoryHandler 内存
java.util.logging.StreamHandler 流
java.util.logging.ConsoleHandler 控制台
java.util.logging.FileHandler 文件
java.util.logging.SocketHandler 网络
*/
ConsoleHandler consoleHandler = new ConsoleHandler(); //控制台
log1.addHandler(consoleHandler);
FileHandler fileHandler = new FileHandler("C:/log/log.log");//文件
/*
默认的日志格式为xml格式,结构太复杂,可以自定义
*/
fileHandler.setFormatter(new LogHandler());
log2.addHandler(fileHandler);
/*
写日志
*/
log1.info("日志1");
log2.info("日志2");
log2.finest("日志不见");//日志级别是Level.INFO比FINEST级别高,所以不会写日志
}
}
/**
* Formatter自定义类
* 类的说明
* @author Walter.Huang
* @create date 2014-12-15
*/
class LogHandler extends Formatter{
@Override
public String format(LogRecord record) {
return record.getLevel()+":"+record.getMessage()+"\n";
}
}
二、common-loging