log4j wrapper

Since I have been using log4j frequently recently, I have to create a logger object at the beginning of the class every time, so I wrote a log4j tool class.

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;
/**
 * Log tool class
 * @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 );
		
	}
	/**
	 * in the form of a placeholder
	 * Example: info("tool class of %s", "log4j") == info("tool class of 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 ) );
	}
	
	
	/*
	 * Get the class of the first caller
	 */
	private static String getClassName() {
		StackTraceElement [] stes = Thread.currentThread().getStackTrace();
		StackTraceElement ste = stes [2];
		return ste.getClassName();
	}
	
	/**
	 * Get log prefix
	 */
	private static String getLogPrefix () {
		String prefix = "";
		StackTraceElement [] stacks = Thread.currentThread().getStackTrace();
		prefix = stacks[3].getClassName() + "." + stacks[3].getMethodName() + ":[" + stacks[3].getLineNumber()+"]";
		return prefix;
	}
	
	/**
	 * Get exception log information
	 */
	private static String getLogExceInfo (Exception e) {
		StringWriter sw	    = new StringWriter();
		
		e.printStackTrace( new PrintWriter( sw, true ) );
		return sw.toString();
	}
	
	/**
	 * Get the logger object based on the class name
	 * @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;
	}
}

 Example of calling:

	public void uploadFile () {
		
		String date = DateHelper.getStr( new Date() , "yyyy-MM-dd" );
		
		LogHelper.info("Date: %s started uploading files" , date);
		
		//file subdirectory path
		String filePath = DateHelper.getStr( new Date() , "yyyyMMdd" );
		// get the file
		List< String > list = dataManager.getSoruceDataList( date );
		//file name
		String fileName = bulidSoruceFileName( list );
		//Create a file
		TxtManager.createFile( filePath , fileName);
		//construct file content
		String content = bulidSoruceContent( list );
		// write content
		TxtManager.writeFile( filePath , fileName , content );
		//Compressed file
		TxtManager.compressedFile( filePath , filePath , fileName);
		
		// get the file stream
		InputStream is = TxtManager.getFileInputStream( filePath , fileName );
		//upload files
		FtpManager.uploadFile( is , filePath , fileName );
		LogHelper.info( "Date: %s upload ended", date );
	}

 log4j configuration file

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

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326360953&siteId=291194637