log4j封装

由于最近在做提使用log4j频繁,每次都要在类的开头都要创建logger对象,于是写了一个log4j工具类。

package com.speedup.check.common;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
/**
 * 日志工具类
 * @author huwy
 *
 */
public class LogHelper {
	private static Map< String , Logger > loggerMap = new HashMap< String , Logger >();
	
	public static void info( Object message ) {
		String className = getClassName();
		Logger logger 	 = getLogger( className );
		logger.info( getLogPrefix() + message );
		
	}
	/**
	 * 占位符的形式
	 * 	示例:info("%s的工具类", "log4j") == info("log4j的工具类")
	 * @param message
	 * @param args
	 */
	public static void info(Object message , Object ...args) {
		String className = getClassName();
		Logger logger 	 = getLogger( className );
		logger.info( getLogPrefix() + String.format( message.toString() , args ) );
	}
	
	public static void error( Exception e) {
		String className = getClassName();
		Logger logger = getLogger( className );

		logger.error( getLogPrefix() ,e );
	}
	
	public static void error (Object message, Exception e) {
		String className = getClassName();
		Logger logger = getLogger( className );
		logger.error( message + getLogPrefix() +  getLogExceInfo( e ) );
	}
	
	
	/*
	 * 获取最开始的调用者所在类
	 */
	private static String getClassName() {
		StackTraceElement [] stes = Thread.currentThread().getStackTrace();
		StackTraceElement ste	  = stes[2];
		return ste.getClassName();
	}
	
	/**
	 * 获取日志前缀
	 */
	private static String getLogPrefix () {
		String prefix = "";
		StackTraceElement [] stacks = Thread.currentThread().getStackTrace();
		prefix = stacks[3].getClassName() + "." + stacks[3].getMethodName() + ":[" + stacks[3].getLineNumber()+"]";
		return prefix;
	}
	
	/**
	 * 获取异常日志信息
	 */
	private static String getLogExceInfo (Exception e) {
		StringWriter sw	    = new StringWriter();
		
		e.printStackTrace( new PrintWriter( sw, true ) );
		return sw.toString();
	}
	
	/**
	 * 根据类名获取logger对象
	 * @param className
	 * @return
	 */
	private static Logger getLogger(String className) {
		Logger logger = null;
		
		if (loggerMap.containsKey( className )) {
			logger = loggerMap.get( className );
		} else {
			try {
				logger = Logger.getLogger( Class.forName( className ) );
				loggerMap.put( className , logger );
			} catch ( Exception e ) {
				e.printStackTrace();
			}
		}
		
		return logger;
	}
}

 调用示例:

	public void uploadFile () {
		
		String date = DateHelper.getStr( new Date() , "yyyy-MM-dd" );
		
		LogHelper.info("日期:%s开始上传文件" , date);
		
		//文件子目录路径
		String filePath = DateHelper.getStr( new Date() , "yyyyMMdd" );
		//获取文件
		List< String > list = dataManager.getSoruceDataList( date );
		//文件名
		String fileName = bulidSoruceFileName( list );
		//创建文件
		TxtManager.createFile( filePath , fileName);
		//构造文件内容
		String content = bulidSoruceContent( list );
		//写入内容
		TxtManager.writeFile( filePath , fileName , content );
		//压缩文件
		TxtManager.compressedFile( filePath , filePath , fileName);
		
		//获取文件流
		InputStream is = TxtManager.getFileInputStream( filePath , fileName );
		//上传文件
		FtpManager.uploadFile( is , filePath , fileName );
		LogHelper.info( "日期:%s上传结束", date );
	}

 log4j配置文件

 log4j.rootLogger = DEBUG, A1, A2
 log4j.appender.A1 = org.apache.log4j.ConsoleAppender
 log4j.appender.A1.layout = org.apache.log4j.PatternLayout
 log4j.appender.A1.layout.ConversionPattern = %p %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
 log4j.appender.A2 = org.apache.log4j.DailyRollingFileAppender
 log4j.appender.A2.File = ${catalina.home}/logs/BusinessCheck/log.txt
 log4j.appender.A2.layout = org.apache.log4j.PatternLayout
 log4j.appender.A2.layout.ConversionPattern = %p %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n

猜你喜欢

转载自huweiyi.iteye.com/blog/2371669