JDK Logger 简介 (zhuan)

http://antlove.iteye.com/blog/1924832

*******************************************

一 简述

java.util.logging是JDK自带的日志记录包。

默认情况下,JDK的LogManager会在JRE目录下的"lib/logging.properties"这个文件中读取配置。

JDK的日志包涉及handler,formatter,level

名词 描述
handler
将日志信息记录到指定的流之中,可能是控制台或者是一个文件或者是任意存储区域。

常用实现类 ConsoleHandlerFileHandlerSocketHandler

formatter 日志信息格式化类。常用实现类 SimpleFormatterXMLFormatter
level
日志记录级别。

SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值)

ALL(记录所有信息)  OFF(不记录任何级别信息)

二 简单Demo

MySimpleFormatter.java

Java代码  

  1. package logging.formatter;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.logging.Level;
  5. import java.util.logging.LogRecord;
  6. import java.util.logging.SimpleFormatter;
  7. public class MySimpleFormatter extends SimpleFormatter{
  8. private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  9. private StringBuilder sb = new StringBuilder();
  10. @Override
  11. public synchronized String format(LogRecord record)
  12. {
  13. Level level=record.getLevel();
  14. String time=sdf.format(new Date(record.getMillis()));
  15. String loggerName=record.getLoggerName();
  16. String message=record.getMessage();
  17. this.sb.append("[").append(level).append("]");
  18. this.sb.append(" ").append(time);
  19. this.sb.append(" ").append(loggerName);
  20. this.sb.append(" :").append(message);
  21. this.sb.append("\n");
  22. return sb.toString();
  23. }
  24. }

DefaultStreamHandler.java

Java代码  

  1. package logging.handler;
  2. import java.io.OutputStream;
  3. import java.util.logging.StreamHandler;
  4. public class DefaultStreamHandler extends StreamHandler {
  5. @Override
  6. public synchronized void setOutputStream(OutputStream out)
  7. throws SecurityException {
  8. super.setOutputStream(out);
  9. }
  10. }

CustomLogManager.java

Java代码  

  1. package logging.util;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.logging.ConsoleHandler;
  5. import java.util.logging.FileHandler;
  6. import java.util.logging.Level;
  7. import java.util.logging.LogManager;
  8. import java.util.logging.Logger;
  9. import logging.formatter.MySimpleFormatter;
  10. import logging.handler.DefaultStreamHandler;
  11. public class CustomLogManager{
  12. static{
  13. LogManager.getLogManager().reset(); // reset the log manager
  14. }
  15. // read the log configuration from outside property file
  16. public static void resetFromPropertyFile(String filePath){
  17. LogManager logManager = LogManager.getLogManager();
  18. InputStream inputStream = CustomLogManagerEditor.class.getClassLoader().getResourceAsStream(filePath);
  19. try {
  20. logManager.readConfiguration(inputStream);
  21. } catch (Exception e) {
  22. throw new RuntimeException("reload log configuration fail: "+e.toString());
  23. }
  24. }
  25. public static Logger getLogger(String name){
  26. Logger logger=Logger.getLogger(name);
  27. logger.setLevel(Level.ALL);
  28. // add console handler
  29. ConsoleHandler consoleHandler=new ConsoleHandler();
  30. consoleHandler.setLevel(Level.FINE);
  31. consoleHandler.setFormatter(new MySimpleFormatter());
  32. logger.addHandler(consoleHandler);
  33. // add file handler
  34. FileHandler fileHandler=null;
  35. try {
  36. fileHandler = new FileHandler("log.log",true);
  37. fileHandler.setLevel(Level.FINE);
  38. fileHandler.setFormatter(new MySimpleFormatter());
  39. logger.addHandler(fileHandler);
  40. } catch (SecurityException e) {
  41. e.printStackTrace();
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. // add default stream handler
  46. DefaultStreamHandler defaultStreamHandler = new DefaultStreamHandler();
  47. defaultStreamHandler.setLevel(Level.ALL);
  48. defaultStreamHandler.setFormatter(new MySimpleFormatter());
  49. defaultStreamHandler.setOutputStream(System.out);
  50. logger.addHandler(defaultStreamHandler);
  51. return logger;
  52. }
  53. }

logging.properties

Properties代码  

  1. #Level的五个等级SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值)  。这个不同于log4j
  2. #指定默认logger级别
  3. .level= ALL
  4. #为 Handler 指定默认的级别(默认为 Level.INFO)。
  5. java.util.logging.ConsoleHandler.level=FINE
  6. # 指定要使用的 Formatter 类的名称(默认为 java.util.logging.SimpleFormatter)。
  7. java.util.logging.ConsoleHandler.formatter=logging.formatter.MySimpleFormatter
  8. # 为 Handler 指定默认的级别(默认为 Level.ALL)。
  9. java.util.logging.FileHandler.level=ALL
  10. # 指定要使用的 Formatter 类的名称(默认为 java.util.logging.XMLFormatter)。
  11. java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
  12. # 指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为 0,则没有限制(默认为无限制)。
  13. java.util.logging.FileHandler.limit=1024000
  14. # 指定有多少输出文件参与循环(默认为 1)。
  15. java.util.logging.FileHandler.count=1
  16. # 为生成的输出文件名称指定一个模式。有关细节请参见以下内容(默认为 "%h/java%u.log")。
  17. java.util.logging.FileHandler.pattern=u.log
  18. # 指定是否应该将 FileHandler 追加到任何现有文件上(默认为 false)。
  19. java.util.logging.FileHandler.append=true
  20. handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler

测试类

Main.java

Java代码  

  1. package logging;
  2. import java.io.IOException;
  3. import java.util.logging.Logger;
  4. import logging.util.CustomLogManager;
  5. public class Main {
  6. public static void main(String[] args) throws SecurityException, IOException {
  7. //      CustomLogManager.resetFromPropertyFile("logging/logging.properties");
  8. //      Logger logger=Logger.getLogger(Main.class.getName());
  9. Logger logger=CustomLogManager.getLogger(Main.class.getName());
  10. logger.fine("warning test!");
  11. }
  12. }

 Note:

CustomLogManagerEditor.getLogger返回的logger拥有三个handler,所以记录日志信息的时候,日志信息会被存储到三个区域【log.log,System.out,System.err】。

当启用CustomLogManagerEditor.resetFromPropertyFile("logging/logging.properties");时,日志信息会被记录到控制台,以及u.log文件。

如果即调用CustomLogManagerEditor.resetFromPropertyFile("logging/logging.properties");又通过CustomLogManagerEditor.getLogger返回的logger记录日志,因为logger有5个handler,所以日志信息会被记录到4个区域【u.log,log.log,System.out,System.err】 其中在System.err中会记录2次。

时间: 2024-08-01 18:41:36

JDK Logger 简介 (zhuan)的相关文章

Lucene:基于Java的全文检索引擎简介 (zhuan)

http://www.chedong.com/tech/lucene.html ********************************************** Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基于词库和自动切分词算法的比较 具体的安装和使用简介:系统结构介绍和演示 Hacking Lucene:简化的查询分析器,删除的

细说log4j

可能做过java项目的基本上都是用过log4j,它是用来做java日志的.比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使用log4j标记某某模块启动了. 努力的人绝对不会成为落后的标兵,加油!废话不多说,进入log4j. 一.log4j简介 1.1.log4j概述 log for java(java日志) Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记

Spring Boot日志管理

Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback.每种Logger都可以通过配置使用控制台或者文件输出日志内容. 格式化日志 默认的日志输出如下: 1 2016-04-13 08:23:50.120 INFO 37397 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3

Spring Boot 探索系列 - 自动化配置篇

26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging,Log4J, Log4J2 an

Linux Shell 高级编程技巧2----shell工具

2.shell工具    2.1.日志文件        简介            创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日志文件        常用的日志文件的方法            以时间为标识的日志文件                例子 #!/bin/bash #当前的日期 current_date=`date "+%Y%m%d"` #今天的日志文件名 todaylog="log/${cu

Java读源代码学设计模式:适配器Adapter

适配器模式相关源代码:slf4j-1.6.1.hibernate-3.6.7 大家都知道.log4j是一个广泛使用的日志工具,除此之外.sun公司在JDK中也有自己的日志工具,也就是java.util.logging.Logger. 当然还有其它一些日志工具. 多种日志工具功能和使用方式相似,一般都包括debug.info.warn.error等日志级别的方法,但却没有实现共同的接口.这一点不像JDBC.尽管关系型数据库种类非常多.比如MySQL.Oracle等,可是有一套统一的接口,也就是JD

20161119

1.JDK Logger(Logging) JUL https://docs.oracle.com/javase/7/docs/api/java/util/logging/FileHandler.html http://lavasoft.blog.51cto.com/62575/184492 http://codecloud.net/71976.html 2. http://lsieun.blog.51cto.com/9210464/1834146 3. http://blog.csdn.net

Java读源码学设计模式:适配器Adapter

适配器模式相关源码:slf4j-1.6.1.hibernate-3.6.7 大家都知道,log4j是一个广泛使用的日志工具,除此之外,sun公司在JDK中也有自己的日志工具,也就是java.util.logging.Logger.当然还有其他一些日志工具. 多种日志工具功能和使用方式类似,一般都包含debug.info.warn.error等日志级别的方法,但却没有实现共同的接口.这一点不像JDBC,虽然关系型数据库种类很多,例如MySQL.Oracle等,但是有一套统一的接口,也就是JDBC.

Log4j,Log4j2,logback,slf4j日志学习

日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程. Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE.DEBUG.INFO.WARN.ERROR.FATAL.OFF.如果配置为OFF级别,表示关闭log. Log4j支持两种格式的配置文件:properties和xml.包含三