log4j的終極封裝


  本人在使用log4j的時候最討厭的就是各種new logger對象了。由於出於偷懶的目的封裝了以下這個Log類。今天發布出來給大家分享一下。

  共8個日志輸出方法,具體如下:

Log.debug("hello log4j"); //debug輸出
Log.debug("自定義Tag","hello log4j"); //debug輸出,帶自定義tag
Log.info("hello info"); //info輸出
Log.info("自定義Tag","hello info"); //info輸出,帶自定義tag
Log.warn("hello warn"); //warn輸出
Log.warn("自定義Tag","hello warn"); //warn輸出,帶自定義tag
Log.error("hello error"); //error輸出
Log.error("自定義Tag","hello error"); //error輸出,帶自定義tag

以下是封裝類的源代碼:

package com.ycl.core.common;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

public class Log {
    
    private static Map<String,Logger> loggerMap = new HashMap<String,Logger>();

    public static void main(String[] args) throws ClassNotFoundException {
        Log.error("自定義LOG","sss444444");
    }
    
    public static void debug(Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        if(log.isDebugEnabled()){
            log.debug(message);
        }
    }
    
    public static void debug(String tag, Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        if(log.isDebugEnabled()){
            log.debug(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
        }
    }

    public static void info(Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        if(log.isInfoEnabled()){
            log.info(message);
        }
    }
    
    public static void info(String tag, Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        if(log.isInfoEnabled()){
            log.info(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
        }
    }
    
    public static void warn(Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        log.warn(message);
    }
    
    public static void warn(String tag, Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        log.warn(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
    }
    
    public static void error(Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        log.error(message);
    }
    
    public static void error(String tag, Object message){
        String className = getClassName();
        Logger log = getLogger(className);
        log.error(new StringBuffer().append("【").append(tag).append("】").append(message).toString());
    }
    
    /**
     * 獲取最開始的調用者所在類
     * @return
     */
    private static String getClassName(){
        Throwable th = new Throwable();
        StackTraceElement[] stes = th.getStackTrace();
        StackTraceElement ste = stes[2];
        return ste.getClassName();
    }
    /**
     * 根據類名獲得logger對象
     * @param className
     * @return
     */
    private static Logger getLogger(String className){
        Logger log = null;
        if(loggerMap.containsKey(className)){
            log = loggerMap.get(className);
        }else{
            try {
                log = Logger.getLogger(Class.forName(className));
                loggerMap.put(className, log);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return log;
    }
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM