1、Java通过 java.util.logging 包(即JUL)下的各个类提供了原生的日志记录和输出的支持,其中主要有4种类:1. Formatter : 日志输出格式,这也是一个抽象类,具体子类比如 SimpleFormatter 代表纯文本的简单格式,XMLFormatter 代表XML格式等。2. Handler :日志输出类,其本身是一个抽象类,具体子类对应不同的日志输出出口,比如 FileHandler 代表日志输出到一个本地文件,ConsoleHandler 代表日志输出到控制台,SocketHandler 代表日志输出到套接字即网络上等。3. Logger :日志记录类,我们就调用这个类的API进行日志记录4. Level:定义了各种日志级别。
2、Formatter : 日志输出格式JUL为我们提供了两种格式,一种是 SimpleFormatter 普通文本格式,一种是 XMLFormatter XML格式,根据自己的需求创建对应的对象即可://简单文本格式的FormatterFormatter sf = new SimpleFormatter();//xml格式的FormatterFormatter xf = new XMLFormatter();
3、Handler :日志输出类这个类决定了我们的日记最后输出到哪里,JUL 提供了 5 种实现类,我们最常用的就是 FileHandler 和 ConsoleHandler, 一个对应文件一个对应控制台。//输出到文件的HanderFileHandler fh = new FileHandler(日志文件的路径);//可以为Handler设置Formatter,默认使用简单文本格式fh.setFormatter(Formatter对象);//Handler可以控制输出的日志级别fh.setLevel(Level.INFO);//输出到控制台的handlerHandler ch = new ConsoleHandler();//Handler可以控制输出的日志级别ch.setLevel(Level.INFO);
4、Logger :日志记录类定义了Formatter 和 Handler,我们就可以创建最终的日志记录类对象了,我们的实际代码中主要调用这个对象的接口进行日志记录。// 获取Logger实例,相同名称对应一个实例,通常使用类名Logger logger = Logger.getLogger(日志记录实例名称);// 添加Handler,可以配置多个,将日志输出到多个地方logger.addHandler(Handler对象);logger.addHandler(Handler对象);//指定logger输出的日志级别, 低于该级别的日志不会输出logger.setLevel(Level.INFO);
5、Level:日志级别,包含如下值:ALL : Integer.MIN_VALUE (全部输出)FINEST :300FINER :400FINE :500CONFIG : 700INFO :800WARNING :900SEVERE :1000OFF : Integer.MAX_VALUE ( 不输出任何日志)
6、有了上面所有的准备工作,我们就可以在代码中调用 Logger 对象记录日志了,Logger提供了两种记录日志的方式,一种是调用时手动指定日志级别,一种是调用特定级别的方法,比如:// 手动指定日志级别logger.log(Level.INFO, "this is a info log");// 调用特定日志级别对应的方法logger.info("this is a info log");JUL 还支持我们在日志中使用标记({数字})和参数,来生成特定的更有意义的日志信息(更多形式可参考截图或自行研究):logger.log(Level.WARNING, "this is a warn, {0} {1}", new Object[]{"p1", "p2"});