关于Java Logger类的使用问题 - 内存不释放

原文地址:http://www.ihuxu.com/p/236.html

 

说明:这是一个利用Java Logger类的示例,完成简单的日志记录功能。代码中有部分类库没有说明,但不影响阅读。

本人技术是新手,对于java的内存问题有着很大的困惑。希望得到网友的指点,问题描述如下:

本人写了一个日志类Log,当加载Log类后,内存会增长20M左右,但是等释放了所有内存变量时,观察内存情况,并没有释放这个20M的迹象。诸如此类的问题还有很多,虽然Java有GC,不用显示释放内存。但是,确实不知道或者观察不到内存的释放过程。

 

代码如下:

 

 1 package tools;
 2  
 3 import java.io.IOException;
 4 import java.util.logging.FileHandler;
 5 import java.util.logging.Level;
 6 import java.util.logging.Logger;
 7  
 8 public class Log {
 9  
10     private static Logger l;
11     private static FileHandler fh;
12      
13     /**
14      * 构造函数
15      * 
16      * @since alpha 0.0.1
17      * 
18      */
19     private Log() {
20         try {
21             Log.l = Logger.getLogger(Config.GLOBAL_LOGGER_NAME);
22             Log.fh = new FileHandler(Config.LOG_FILE_NAME,true);
23             Log.l.addHandler(Log.fh);
24             Log.l.setLevel(Level.ALL);
25         } catch (SecurityException e) {
26             e.printStackTrace();
27         } catch (IOException e) {
28             e.printStackTrace();
29         }
30     }
31      
32     /**
33      * 获取单利 - 单利模式
34      * 
35      * @return Logger
36      * @since alpha 0.0.1
37      * 
38      */
39     private static Logger getInstance() {
40          
41         if( Log.l == null ) {
42             new Log();
43         }
44          
45         return Log.l;
46     }
47      
48     /**
49      * log
50      * 
51      * @param l
52      * @param str
53      * @since alpha 0.0.1
54      * 
55      */
56     public static void log(Level l, String str) {
57         Logger logger = Log.getInstance();
58         logger.log(l,str);
59     }
60      
61     public static void flush() {
62         Log.fh.flush();
63     }
64      
65     public static void close() {
66         if( Log.l != null ) {
67             Log.l = null;
68         }
69         if( Log.fh != null ) {
70             Log.fh.flush();
71             Log.fh.close();
72             Log.fh = null;
73         }
74     }
75      
76 }

 


调用代码:

 

1 Log.log(Level.ALL,"some info");//此时内存增加20M
2 Log.close();//内存无变化,尽管加上System.GC()也没有变化

 

转载于:https://www.cnblogs.com/wuniaoheart/p/3601679.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Logger不输出可能有以下几个原因: 1. Logger的日志级别过高。Logger有多个日志级别,包括SEVERE、WARNING、INFO、CONFIG、FINE、FINER和FINEST,如果Logger的日志级别设置得太高,可能会过滤掉一些低级别的日志信息。可以使用Logger.setLevel()方法来修改日志级别。 2. Logger的Handler没有设置。Logger可以有多个Handler来处理日志信息,如果没有设置HandlerLogger的日志信息将不会输出到任何地方。可以使用Logger.addHandler()方法来添加Handler,例如添加ConsoleHandler可以输出日志信息到控制台。 3. Logger的Handler的日志级别过高。与Logger似,Handler也有多个日志级别,如果Handler的日志级别设置得太高,可能会过滤掉一些低级别的日志信息。可以使用Handler.setLevel()方法来修改日志级别。 4. Logger的Filter过滤了日志信息。Logger可以设置Filter来过滤日志信息,如果Filter过滤掉了所有的日志信息,Logger的日志信息将不会输出。可以使用Logger.setFilter()方法来设置Filter。 5. Logger的日志信息没有正确的格式化。Logger默认使用SimpleFormatter来格式化日志信息,如果日志信息没有正确的格式化,可能会导致Logger的日志信息无法输出。可以使用Logger.setFormatter()方法来设置Formatter。 需要注意的是,如果以上方法都没有解决问题,可能是由于其他原因导致Logger不输出日志信息,需要进行更深入的排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值