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

  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

  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

  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

  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

  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次。

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

  1. JDK的简介,卸载和安装过程

    JDK的简介,卸载和安装过程 JDK JRE JVM JDK:Java Development Kit JRE:Java Runtime Environment JVM:Java Virtual Ma ...

  2. 3-30 flash(api),rescue_from(); logger简介

    ActionDispatch::Flash < Objec pass temporary primitive-types (String, Array, Hash) between action ...

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

    http://www.chedong.com/tech/lucene.html ********************************************** Lucene是一个基于Ja ...

  4. 2.java.util.logging.Logger使用详解

    一.java.util.logging.Logger简介 java.util.logging.Logger不是什么新鲜东西了,1.4就有了,可是因为log4j的存在,这个logger一直沉默着, 其实 ...

  5. JDK自带的日志Logging

    OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...

  6. logback中logger详解

    前言 logback实践笔记 ​ 上一篇主要对root进行了实践总结,现在基于上一篇中的springboot代码环境对logback.xml中的logger来进行实践和自己遇到的坑. logger简介 ...

  7. Java日志 (zhuan)

    http://www.cnblogs.com/bird-li/p/4696662.html ************************************************* 日志对于 ...

  8. 日志框架--(二)JDK Logging

    前言 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用.相对于其他的日志框架,JDK自带的日志可谓是鸡肋,无论易 ...

  9. Logback相关知识汇总

    例如:%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4格式修饰符,与转换符共同使用:可选的格式修饰符位于“%”和转换符之间.第一个可选修饰符是左对齐 标志 ...

随机推荐

  1. OpenERP 在context中写自己的部门ID

    使用OpenERP自定义模块开发的时候,你会发现,有一个uid(当前登录用户id)特别好用,不管是在xml的domain 条件表达式中,还是在类中,都能很方便的使用uid.有一段时间就一直在琢磨,这个 ...

  2. virtual的使用方法

    virtual有几种使用方法呢.这里不过抛砖引玉.并没有进行整理和总结. 一般在基类中定义的函数前面喜欢加上virtual.那作用是什么呢. 为了实现多态吗?是的.基类写了一个比較通用的实现方法,子类 ...

  3. RESTFul中的那些事(2)----怎样支持RESTFul的HTTP Patch方法?

    我们在调用RESTFul服务的时候,有的时候.第三方的服务会提供支持PATCH 操作的方法,在这样的情况下.我们假设我们以下的这样的方式, 去调用PATCH操作.肯定会返回40X的错误. PATCH ...

  4. 深入了解MyBatis参数

    参考1 参考2 参考3

  5. PHP-深入学习Smarty

    本文中的边界标签分别为"<{"和"}>" start-12, 都是静态模板中的内容, 即使函数也只是模板中的标签或者变量调解器; 13-end, 都 ...

  6. ArchLinux安装 LXDE

    http://wiki.lxde.org/zh/index.php?title=ArchLinux&variant=zh-cn 透过 pacman 安装 LXDE 大多数的最新 LXDE 套件 ...

  7. InteliJ Idea通过maven创建webapp

    facet是IDE给工程添加的属性,在使用maven时一定不能使用facet 一.创建maven项目,选定webapp作为archtype,这样就会自动生成webapp目录 如果没有给maven设置代 ...

  8. Kafka日志清除策略

    一.更改日志输出级别 config/log4j.properties中日志的级别设置的是TRACE,在长时间运行过程中产生的日志大小吓人,所以如果没有特殊需求,强烈建议将其更改成INFO级别.具体修改 ...

  9. python学习笔记——多进程一 基础概念

    1 进程 进程:程序的一次(从开始到结束)执行过程,属于一个动态过程.是系统进行资源分配和调度的基本单位. 程序:指的是一个文件,磁盘中可执行的代码.属于一个静态文件 注:进程运行时需要把程序加载如内 ...

  10. PLSQL_Oracle Exception异常分类、异常抛出、异常处理、异常传播(概念)

    2014-06-03 Created By BaoXinjian