您的位置:首页 > 其它

Log4j简单封装及配置

2016-03-02 00:00 225 查看
摘要: 大家在项目中经常会用到Log4j,一般包括4个步骤:
1.编写log4j配置文件;
2.初始化log4j;
3.获取一个logger实例;
4.调用logger.debug() 等记录日志。

大家在项目中经常会用到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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: