`

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

    《Log4j笔记 第九章 封装Log4j》 在Java开发中,日志记录是一项非常重要的任务,它帮助我们追踪程序运行时的状态,定位和解决错误。Log4j是Apache组织提供的一款强大的日志框架,因其高效、灵活和可配置性而广受...

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

    这个压缩包包含了一个已经封装好的Log4j实现,使得在项目中集成和使用日志变得更加简便。 首先,我们来看看`log4j.properties`文件。这是Log4j的配置文件,它定义了日志的输出级别、格式、目的地等。例如,你可以...

    log4cxx封装为通用LOG宏

    Log4cxx是Apache软件基金会的一个开源项目,它是C++版的log4j,提供了一套强大的日志处理机制。本文将详细讨论如何将log4cxx封装为通用LOG宏,以及其配置文件的详细内容。 首先,让我们了解log4cxx的基本概念。Log4...

    log4j多文件输出打印

    Log4j是Apache提供的一款强大的日志处理框架,它灵活且功能强大,广泛应用于各种Java项目中。本话题将深入探讨如何使用Log4j实现多文件输出打印,以及自定义日志的配置。 首先,我们要理解Log4j的基本工作原理。Log...

    log4j注释文档

    ### log4j注释文档详解 #### 一、概述 `log4j`是一款非常流行的Java日志框架,它能够帮助开发者记录程序运行时的信息,从而便于后续的问题追踪与调试。本文档旨在对一份log4j配置文件进行详细解读,以便初学者能够...

    C++基于LOG4CPP的使用封装库

    LOG4CPP是Apache软件基金会的一个项目,它模仿了Java的LOG4J框架,为C++程序员提供了类似的功能。LOG4CPP的核心思想是层次化的日志记录,通过定义不同的日志级别(如DEBUG、INFO、WARN、ERROR和FATAL)来控制日志...

    基于log4cxx封装的一个日志类

    Log4cxx是Apache软件基金会提供的一款针对C++的日志库,它是Log4j的C++实现,提供了类似的功能和接口。本文将深入探讨如何基于log4cxx封装一个自定义的日志类,以便在项目中更加便捷地管理和使用日志。 首先,我们...

    log4j 源码包 日志包 2.11.0

    《深入解析Log4j 2.11.0源码》 Log4j,作为Java领域最常用的日志框架之一,其2.11.0版本的发布为开发者提供了更加强大、高效和灵活的日志处理能力。源码包的获取,对于开发者深入理解其工作原理、定制化需求以及...

    log4cplus日志封装log

    首先,`log4cplus`模仿了Java中的`log4j`框架,提供了一个强大的日志处理机制。这个库的核心设计理念是模块化、可配置性和可扩展性。它允许开发者根据需要调整日志级别(如DEBUG、INFO、WARN、ERROR等),并且可以将...

    Log4J学习笔记

    #### 三、Log4J封装 为了更好地管理和使用Log4J,通常会对其进行一定的封装,以提供更加简洁易用的接口。 1. **常见封装方式:** - **工厂模式**:创建一个Logger工厂类,负责创建不同类型的Logger实例。 - **...

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

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

    log4cplus封装类

    Log4cplus是一个广泛使用的C++日志记录库,它借鉴了Java的log4j理念,为C++程序员提供了强大的日志管理功能。本文将深入探讨log4cplus封装类的原理、使用方法,并结合实际项目经验,分享其在项目中的具体应用。 一...

    深入学习log4J

    再者,Log4J的封装是指将Log4J的功能融入到自定义的类库或框架中,以便在整个项目中统一日志处理。封装可以创建一个简单的日志接口,内部调用Log4J的方法,使得代码更加简洁且易于维护。同时,封装也有助于在未来...

    log4j2-2.3

    6. **事件数据结构**:Log4j2使用LogEvent对象封装日志信息,使其更易于处理和过滤。 7. **日志级别的优先级**:Log4j2允许设置每个Logger的优先级,便于控制日志输出的详细程度。 8. **自动重加载配置**:如果...

    log4j.jar.rar

    这个压缩包“log4j.jar.rar”包含的是Log4j的核心库文件“log4j.jar”,这是一个Java Archive (JAR) 文件,用于封装和分发Java类、资源以及元数据。Log4j的目的是提供一种灵活且高性能的方式来处理应用程序中的日志...

    log4j2.10.0

    5. **日志事件模型**:Log4j 2使用`LogEvent`对象来封装日志信息,包括日志级别、消息、时间戳等。源码中的`LogEventFactory`和`Log4jLogEvent`类揭示了日志事件的创建和处理流程。 6. **错误处理与回退策略**:当...

    log4j从入门到详解

    ### log4j从入门到详解 #### 1. Log4j简介 Log4j是一款由Apache组织提供的开源日志组件,被广泛应用于Java应用程序中。它可以帮助开发者在应用程序中记录日志信息,这对于调试程序、追踪错误以及进行系统监控等...

Global site tag (gtag.js) - Google Analytics