`

log4j封装

    博客分类:
  • java
阅读更多

由于最近在做提使用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

 

分享到:
评论

相关推荐

    Log4j笔记 第九章 封装Log4j

    NULL 博文链接:https://mwhgjava.iteye.com/blog/930106

    封装好的log4j 包括properties文件和使用类

    把log4j的jar放入工程下,直接调用Log4jUtil下面的静态方法就可以了。

    深入学习log4j

    Loggers组件的主要功能是提供相应API,根据不同配置的loggers将不同级别的log输入到控制台或文件,类似于java中经常用到的System.out.println,但是log4j封装后的loggers组件能够输出更丰富的信息,包括时间,线程,...

    深入学习log4J

    本书的主要内容有: 1.Log4J配置文件的学习 2.Log4J数据库 3.Log4J封装

    log4j多文件输出打印

    log4j、日志输出、自定义日志、多文件输出。

    log4j 同时按日期和文件大小分割日志

    已经封装好,把log4j.appender.fileout=org.apache.log4j.Log4JDateAndSizeSplit 即可,其余和原api一样: log4j.appender.fileout.MaxFileSize=10240KB log4j.appender.fileout.MaxBackupIndex=20

    log4j注释文档

    log4j注释文档,全部注释都在里面。详情请下载查看。

    log5j工具包

    log5j在log4j的基础上提供了几个改进,应该说是简单和实用的封装。有趣的是log5j主页对自己名字的解释,因为要感谢JDK 1.5,所以才叫了这个名字。

    log4j-1.2.17.jar.zip

    包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...

    日志组件log5j-1.2.jar包

    日志组件log5j,在log4j的基础上进行了封装和改进,使用更加方便高效。

    Node.js log4js日志管理详解

    如果用过JAVA中log4j的同学,肯定对日志并不陌生,学习log4js会更得心应手的。 项目要用log4js记录日志,网上找的教程都是很久以前的,新版本log4js跟旧版本有一些不同,看文档结合旧版本配置了能用的log4js,记录...

    Log4J学习笔记

    Log4J学习笔记 1、配置文件 2、数据库 3、封装

    log4j-1.2.16.zip jar包

    包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...

    log4j-1.2.12.jar.zip

    包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...

    log4j-api-2.0-rc1.jar.zip

    包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...

    slf4j-log4j12-1.7.5.jar.zip

    包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...

    C#关于log4net(Log For Net)的使用说明

    log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息...它是针对Java的log4j(Log For Java的)姊妹工具.用过log4j的都知道,它功能强大,可配置性灵活,线程安全,对日志的输出管理和级别管理方便。

    该工程包括邮件发送,quartz调度框架使用,log4j使用,资源文件读取

    该内容为自己写的一个程序,使用quartz调度框架可以定时读取数据库(程序里连的是oracle)发送邮件,本程序用到log4j并对log4j进行了封装,和一个不错的资源文件读取类,一个UtilLj工具类,虽然里面有些方法本程序没有...

    非常好用的日志工具log4j

    Simple Logging Facade for Java(SLF4J) ,它为多个日志框架提供了一个封装好的调用方式。SLF4J 允许用户在部署时插入所需的日志框架。

    slf4j与其它日志api的结合

    关于日志的一些小例子,包括slf4j, log4j等

Global site tag (gtag.js) - Google Analytics