Log4j简单封装及配置

大家在项目中经常会用到Log4j,一般包括4个步骤:

1.编写log4j配置文件;

2.初始化log4j;

3.获取一个logger实例;

4.调用logger.debug() 等记录日志。


为了能详细控制每个包和类的日志输出,一般在每个类中都需要定一个logger实例,类似下面这样:

public class ContextFactory {  
    private static final Logger s_logger = Logger.getLogger(ContextFactory.class);  
  
    public void test() {
        s_logger.debug("this is debug.");  
    }  
}



无形中给使用带来了不便。

为了解决这个问题,本人对Log4j进行了一个简单的封装LogHelper.java:

package com.touna.lhh.utils;

import java.io.FileNotFoundException;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.springframework.util.Log4jConfigurer;


/**
 * 
 * <日志工具类>
 * @author JiangLiu WJ14380
 * @since  2016年3月1日
 */
public class LogHelper{
	
	/**
	 * 初始化日志配置文件
	 */
	static {
		try {
			Log4jConfigurer.initLogging("classpath:config/log4j.properties");
		} catch (FileNotFoundException e) {
			System.err.println("初始化日志实例异常");
			e.printStackTrace();
		}
    }  
	/**
	 * 
	 * <运行时产生的事件>
	 * @author JiangLiu WJ14380
	 * @since  2016年3月2日
	 * @param msg void
	 */
    public static void info(Object msg) {  
        StackTraceElement stack[] = (new Throwable()).getStackTrace();  
  
        Logger logger = Logger.getLogger(stack[1].getClassName());  
        logger.log(LogHelper.class.getName(), Level.INFO, msg, null);  
    }  
    /**
     * 
     * <运行时异常以及预期之外的错误>
     * @author JiangLiu WJ14380
     * @since  2016年3月2日
     * @param msg void
     */
    public static void error(Object msg) {  
        StackTraceElement stack[] = (new Throwable()).getStackTrace();  
  
        Logger logger = Logger.getLogger(stack[1].getClassName());  
        logger.log(LogHelper.class.getName(), Level.ERROR, msg, null);  
    }  
    /**
     * 
     * <与程序运行时的流程相关的详细信息>
     * @author JiangLiu WJ14380
     * @since  2016年3月2日
     * @param msg void
     */
    public static void debug(Object msg) {  
        StackTraceElement stack[] = (new Throwable()).getStackTrace();  
  
        Logger logger = Logger.getLogger(stack[1].getClassName());  
        logger.log(LogHelper.class.getName(), Level.DEBUG, msg, null);  
    }  
    /**
     * 
     * <预期之外的运行时状况,不一定是错误的情况>
     * @author JiangLiu WJ14380
     * @since  2016年3月2日
     * @param msg void
     */
    public static void warn(Object msg) {  
        StackTraceElement stack[] = (new Throwable()).getStackTrace();  
  
        Logger logger = Logger.getLogger(stack[1].getClassName());  
        logger.log(LogHelper.class.getName(), Level.WARN, msg, null);  
    }
    
    /**
     * 
     * <导致程序提前结束的严重错误>
     * @author JiangLiu WJ14380
     * @since  2016年3月2日
     * @param msg void
     */
    public static void fatal(Object msg) {  
        StackTraceElement stack[] = (new Throwable()).getStackTrace();  
  
        Logger logger = Logger.getLogger(stack[1].getClassName());  
        logger.log(LogHelper.class.getName(), Level.FATAL, msg, null);  
    }
    
    /**
     * 
     * <导致程序提前结束的严重错误>
     * @author JiangLiu WJ14380
     * @since  2016年3月2日
     * @param msg void
     */
    public static void trace(Object msg) {  
        StackTraceElement stack[] = (new Throwable()).getStackTrace();  
  
        Logger logger = Logger.getLogger(stack[1].getClassName());  
        logger.log(LogHelper.class.getName(), Level.TRACE, msg, null);  
    }
}

使用时,不需要在每个类中定义logger,而是直接调用LogHelper.debug(msg)就可以了。方便了大家的使用。

而在LogHelper.debug()中封装了获取logger对象及获取调用者位置等步骤。


最后附上一个log4j.xml的配置

#日志级别
level = INFO

#定义LOG输出级别
log4j.rootLogger=${level}, file, Console , A1

#输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss}][%t][%c] %m%n

#ERROR日志 - 按天输出一个文件
log4j.appender.A1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File = ${catalina.base}/logs/ssm-api/api-error.log
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern =[%p][%d{yyyy-MM-dd HH\:mm\:ss}][%t][%c] %m%n
log4j.appender.A1.Threshold=ERROR

#项目日志 - 按天输出一个文件
log4j.appender.Porject = org.apache.log4j.DailyRollingFileAppender
log4j.appender.Porject.File = ${catalina.base}/logs/ssm-api/api.log
log4j.appender.Porject.layout = org.apache.log4j.PatternLayout
log4j.appender.Porject.layout.ConversionPattern =[%p][%d{yyyy-MM-dd HH\:mm\:ss}][%t][%c] %m%n
log4j.logger.com.touna=${level},Porject
log4j.logger.org.springframework=${level},Porject
log4j.logger.java.sql.Connection=${level}, Porject
log4j.logger.java.sql.Statement=${level}, Porject
log4j.logger.java.sql.PreparedStatement=${level}, Porject
log4j.logger.org.springframework.web=${level}

解释:

1. com.lenovo下的log 显示debug信息。当然也可控制到具体的类。

2. org.apache下的log显示warn信息。

3. root显示debug信息,记录到控制台和文件。

4.配置是有顺序的,虽然root是debug级别,但在他之前定义了org.apache是warn级别,所以org.apache只会输出warn级别的log。


转载于:https://my.oschina.net/u/2435057/blog/627663

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值