zoukankan      html  css  js  c++  java
  • 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.   
    11.     @Override  
    12.     public synchronized String format(LogRecord record)  
    13.     {  
    14.         Level level=record.getLevel();  
    15.         String time=sdf.format(new Date(record.getMillis()));  
    16.         String loggerName=record.getLoggerName();  
    17.         String message=record.getMessage();  
    18.           
    19.         this.sb.append("[").append(level).append("]");  
    20.         this.sb.append(" ").append(time);  
    21.         this.sb.append(" ").append(loggerName);  
    22.         this.sb.append(" :").append(message);  
    23.         this.sb.append(" ");  
    24.         return sb.toString();  
    25.     }  
    26. }  

     

    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.       
    16.     // read the log configuration from outside property file  
    17.     public static void resetFromPropertyFile(String filePath){  
    18.         LogManager logManager = LogManager.getLogManager();    
    19.         InputStream inputStream = CustomLogManagerEditor.class.getClassLoader().getResourceAsStream(filePath);    
    20.         try {  
    21.             logManager.readConfiguration(inputStream);  
    22.         } catch (Exception e) {  
    23.             throw new RuntimeException("reload log configuration fail: "+e.toString());  
    24.         }         
    25.     }  
    26.   
    27.   
    28.     public static Logger getLogger(String name){  
    29.         Logger logger=Logger.getLogger(name);  
    30.         logger.setLevel(Level.ALL);  
    31.           
    32.         // add console handler  
    33.         ConsoleHandler consoleHandler=new ConsoleHandler();  
    34.         consoleHandler.setLevel(Level.FINE);  
    35.         consoleHandler.setFormatter(new MySimpleFormatter());  
    36.         logger.addHandler(consoleHandler);  
    37.           
    38.         // add file handler  
    39.         FileHandler fileHandler=null;  
    40.         try {  
    41.             fileHandler = new FileHandler("log.log",true);  
    42.             fileHandler.setLevel(Level.FINE);  
    43.             fileHandler.setFormatter(new MySimpleFormatter());  
    44.             logger.addHandler(fileHandler);  
    45.         } catch (SecurityException e) {  
    46.             e.printStackTrace();  
    47.         } catch (IOException e) {  
    48.             e.printStackTrace();  
    49.         }  
    50.           
    51.         // add default stream handler  
    52.         DefaultStreamHandler defaultStreamHandler = new DefaultStreamHandler();  
    53.         defaultStreamHandler.setLevel(Level.ALL);  
    54.         defaultStreamHandler.setFormatter(new MySimpleFormatter());  
    55.         defaultStreamHandler.setOutputStream(System.out);  
    56.         logger.addHandler(defaultStreamHandler);  
    57.           
    58.         return logger;  
    59.     }  
    60. }  

     

    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.     
    9. # 为 Handler 指定默认的级别(默认为 Level.ALL)。     
    10. java.util.logging.FileHandler.level=ALL  
    11. # 指定要使用的 Formatter 类的名称(默认为 java.util.logging.XMLFormatter)。     
    12. java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter  
    13. # 指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为 0,则没有限制(默认为无限制)。     
    14. java.util.logging.FileHandler.limit=1024000  
    15. # 指定有多少输出文件参与循环(默认为 1)。     
    16. java.util.logging.FileHandler.count=1  
    17. # 为生成的输出文件名称指定一个模式。有关细节请参见以下内容(默认为 "%h/java%u.log")。     
    18. java.util.logging.FileHandler.pattern=u.log    
    19. # 指定是否应该将 FileHandler 追加到任何现有文件上(默认为 false)。     
    20. java.util.logging.FileHandler.append=true  
    21.   
    22. 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.           
    10.         Logger logger=CustomLogManager.getLogger(Main.class.getName());  
    11.           
    12.         logger.fine("warning test!");  
    13.     }  
    14. }  

     

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

     

     

  • 相关阅读:
    nginx通过多级代理获得真实用户IP的方法
    装饰器
    base64文件隐写脚本
    椭圆曲线加密
    mysql创建账号及管理权限
    Linux 中指定启动 tomcat 的 jdk 版本
    Linux 下创建 sftp 用户并限定目录
    linux 服务器脚本采集数据中文无法执行错误
    poi 读取使用 Strict Open XML 保存的 excel 文档
    win7 配置Windows Update 失败,还原更改,无法进入系统
  • 原文地址:https://www.cnblogs.com/zhao1949/p/5955118.html
Copyright © 2011-2022 走看看