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实例,类似下面这样:
无形中给使用带来了不便。
为了解决这个问题,本人对Log4j进行了一个简单的封装LogHelper.java:
使用时,不需要在每个类中定义logger,而是直接调用LogHelper.debug(msg)就可以了。方便了大家的使用。
而在LogHelper.debug()中封装了获取logger对象及获取调用者位置等步骤。
最后附上一个log4j.xml的配置
解释:
1. com.lenovo下的log 显示debug信息。当然也可控制到具体的类。
2. org.apache下的log显示warn信息。
3. root显示debug信息,记录到控制台和文件。
4.配置是有顺序的,虽然root是debug级别,但在他之前定义了org.apache是warn级别,所以org.apache只会输出warn级别的log。
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。
相关文章推荐
- Freemarker 最简单的例子程序
- sed简单用法
- gtest 连接问题解决办法
- 生活如此多娇,纯靠技术撑腰
- tq2440触摸屏学习笔记(转)
- href=“javascript:”vs href=“javascript:void(0)”
- phpqrcode
- 同一页面播放多个mp3的解决方法
- 4.4 Hibernate高级功能
- ZooKeeper 集群配置
- MINA的心跳filter的使用
- Java8 HashMap实现原理探究
- tomcat的性能与最大并发(1000)
- 银行卡三元素检测 根据姓名+身份证号+银行卡卡号验证信息是否匹配
- 探索mysql的分区
- 点击获取短信验证码 倒计时
- 自定义tabBar
- android 热修复 HotFix 混淆apk生成patch包方案
- Logstash+Redis+Elasticsearch+Kibana+Nginx搭建日志分析系统
- java如何访问局域网共享文件