zoukankan      html  css  js  c++  java
  • 通配置文件的方式控制java.util.logging.Logger日志输出

    转自:http://zochen.iteye.com/blog/616151

    简单的实现了下利用JDK中类java.util.logging.Logger来记录日志。主要在于仿照log4j方式用配置文件来配置日志的输出。网络上关于如何使用java.util.logging.Logger的文章很多,但是没有完整的如何通过配置配置文件来达到控制日志输出的资料。本文的目的在于此,欢迎拍砖。 
      上码。。。 

      1.首先封装了个LogManager。该类的主要作用就是static块中的代码,意在读取properties文件,初始化日志属性。 

    Java代码  收藏代码
    1. import java.io.IOException;  
    2. import java.io.InputStream;  
    3. import java.util.logging.Logger;  
    4.   
    5. public class LogManager {  
    6.   
    7.     // 初始化LogManager  
    8.     static {  
    9.         // 读取配置文件  (这边也可以使用文件流)
    10.         ClassLoader cl = LogManager.class.getClassLoader();  
    11.         InputStream inputStream = null;  
    12.         if (cl != null) {  
    13.             inputStream = cl.getResourceAsStream("log.properties");  
    14.         } else {  
    15.             inputStream = ClassLoader  
    16.                     .getSystemResourceAsStream("log.properties");  
    17.         }  
    18.         java.util.logging.LogManager logManager = java.util.logging.LogManager  
    19.                 .getLogManager();  
    20.         try {  
    21.             // 重新初始化日志属性并重新读取日志配置。  
    22.             logManager.readConfiguration(inputStream);  
    23.         } catch (SecurityException e) {  
    24.             System.err.println(e);  
    25.         } catch (IOException e) {  
    26.             System.err.println(e);  
    27.         }  
    28.     }  
    29.   
    30.     /** 
    31.      * 获取日志对象 
    32.      * @param clazz 
    33.      * @return 
    34.      */  
    35.     public static Logger getLogger(Class clazz) {  
    36.         Logger logger = Logger  
    37.                 .getLogger(clazz.getName());  
    38.         return logger;  
    39.     }  
    40.   
    41. }  

      

      2.在需要记录日志的地方,通过LogManager.getLogger()方法得到Logger对象,然后调用其记录日志的方法记录日志。这里,我记录错误堆栈信息是用的 log(Level level, String msg, Throwable thrown) 。 


    贴出我的properties配置文件内容,其中handlers属性一定别忘了,我就因为缺少这个属性花费了很多时间找原因。 

    Java代码  收藏代码
    1. #Level的五个等级SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值)  。这个不同于log4j  
    2.   
    3. #为 Handler 指定默认的级别(默认为 Level.INFO)。   
    4. java.util.logging.ConsoleHandler.level=INFO  
    5. # 指定要使用的 Formatter 类的名称(默认为 java.util.logging.SimpleFormatter)。   
    6. java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter  
    7.   
    8. # 为 Handler 指定默认的级别(默认为 Level.ALL)。   
    9. java.util.logging.FileHandler.level=INFO  
    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=C:/SSLog%u.log  
    18. # 指定是否应该将 FileHandler 追加到任何现有文件上(默认为 false)。   
    19. java.util.logging.FileHandler.append=true  
    20.   
    21.   
    22.   
    23. handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler  




    这样配置后还有一个缺陷,日志文件累积到指定的大小时,将会被重新创建,也就是之前的日志信息会丢失,但是不设置大小的话会导致单个文件过大。关于这个问题还没有花时间去细究,以下这篇博文应该能解决这一问题。 
    为java.util.logging自定义文件处理器及日志输出格式 

  • 相关阅读:
    通过实验窥探javascript的解析执行顺序
    HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员)
    Google Guava之Optional优雅的使用null
    sharding-jdbc源码学习(一)简介
    重构——改善既有代码的设计
    spring自定义标签
    java自定义注解
    开源项目集合
    Lombok引入简化Java代码
    设计模式之建造者模式
  • 原文地址:https://www.cnblogs.com/x_wukong/p/4500909.html
Copyright © 2011-2022 走看看