由于最近在做提使用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
相关推荐
NULL 博文链接:https://mwhgjava.iteye.com/blog/930106
把log4j的jar放入工程下,直接调用Log4jUtil下面的静态方法就可以了。
Loggers组件的主要功能是提供相应API,根据不同配置的loggers将不同级别的log输入到控制台或文件,类似于java中经常用到的System.out.println,但是log4j封装后的loggers组件能够输出更丰富的信息,包括时间,线程,...
本书的主要内容有: 1.Log4J配置文件的学习 2.Log4J数据库 3.Log4J封装
log4j、日志输出、自定义日志、多文件输出。
已经封装好,把log4j.appender.fileout=org.apache.log4j.Log4JDateAndSizeSplit 即可,其余和原api一样: log4j.appender.fileout.MaxFileSize=10240KB log4j.appender.fileout.MaxBackupIndex=20
log4j注释文档,全部注释都在里面。详情请下载查看。
log5j在log4j的基础上提供了几个改进,应该说是简单和实用的封装。有趣的是log5j主页对自己名字的解释,因为要感谢JDK 1.5,所以才叫了这个名字。
包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...
日志组件log5j,在log4j的基础上进行了封装和改进,使用更加方便高效。
如果用过JAVA中log4j的同学,肯定对日志并不陌生,学习log4js会更得心应手的。 项目要用log4js记录日志,网上找的教程都是很久以前的,新版本log4js跟旧版本有一些不同,看文档结合旧版本配置了能用的log4js,记录...
Log4J学习笔记 1、配置文件 2、数据库 3、封装
包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...
包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...
包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...
包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令...
log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息...它是针对Java的log4j(Log For Java的)姊妹工具.用过log4j的都知道,它功能强大,可配置性灵活,线程安全,对日志的输出管理和级别管理方便。
该内容为自己写的一个程序,使用quartz调度框架可以定时读取数据库(程序里连的是oracle)发送邮件,本程序用到log4j并对log4j进行了封装,和一个不错的资源文件读取类,一个UtilLj工具类,虽然里面有些方法本程序没有...
Simple Logging Facade for Java(SLF4J) ,它为多个日志框架提供了一个封装好的调用方式。SLF4J 允许用户在部署时插入所需的日志框架。
关于日志的一些小例子,包括slf4j, log4j等