关于Java日志框架应用总结
来源:互联网 发布:微信站街软件哪家好 编辑:程序博客网 时间:2024/05/16 19:40
在使用java进行开发时,日志模块基本是一个必不可少的部分,它对调试,记录运行,问题定位都起到很重要的作用。
常用的日志框架包括:
1、sf4j(http://www.slf4j.org/);
2、commons-logging(http://commons.apache.org/proper/commons-logging/);
3、log4j(http://logging.apache.org/log4j/1.2/);
4、JDK自带logging;
5、其它日志框架。
这些日志框架的常用功能和使用方式都是大体相同的(在这里我们不讨论这些日志框架原理,如何使用,关联,以及区别),所以我们有必要对它进行一个简单的归纳,形成自己(代码或者项目中)日志模块(包括了日志接口和代理实现)。
归纳接口(LoggerAdapter)如下:
//==============================================================================//// @author Slive// @date 2013-6-18////==============================================================================package org.slive.logging;/*** Self-defining logger interface.* it can replace any loggers simply.* <ul> * <li>{@linkplain java.util.logging.Logger}* <li>{@linkplain org.slf4j.Logger}* <li>{@linkplain org.apache.log4j.Logger}* <li>{@org.apache.commons.logging.Log}* </ul>* @author Slive*/public interface LoggerAdapter{ public void info(String msg); public void info(Throwable ex); public void info(String msg,Throwable ex); public void info(String msg,Object... params); public void debug(String msg,Throwable ex); public void debug(String msg); public void debug(Throwable ex); public void debug(String msg,Object... params); public void error(String msg,Throwable ex); public void error(String msg); public void error(Throwable ex); public void error(String msg,Object... params); public void warn(String msg); public void warn(Throwable ex); public void warn(String msg,Throwable ex); public void warn(String msg,Object... params); }
//==============================================================================//// @author Slive// @date 2013-6-18////==============================================================================package org.slive.logging.java;import java.util.logging.Level;import java.util.logging.Logger;import org.slive.logging.LoggerAdapter;/*** A simple logger's adapter of <code>java.util.logging.Logger</code>* @see java.util.logging.Logger* @author Slive*/public class LoggerJavaAdapter implements LoggerAdapter{ private Logger logger; public LoggerJavaAdapter(Class clazz) { logger = Logger.getLogger(clazz != null ? clazz.getName() : " "); } @Override public void debug(String msg, Throwable ex) { logger.log(Level.FINEST, msg, ex); } @Override public void debug(String msg) { logger.log(Level.FINEST, msg); } @Override public void debug(Throwable ex) { if (ex == null) { logger.log(Level.FINEST, null); } else { logger.log(Level.FINEST, ex.getMessage(), ex); } } @Override public void debug(String msg, Object... params) { logger.log(Level.FINEST, msg, params); } @Override public void error(String msg, Throwable ex) { logger.log(Level.SEVERE, msg, ex); } @Override public void error(String msg) { logger.log(Level.SEVERE, msg); } @Override public void error(Throwable ex) { if (ex == null) { logger.log(Level.SEVERE, null); } else { logger.log(Level.SEVERE, ex.getMessage(), ex); } } @Override public void error(String msg, Object... params) { logger.log(Level.SEVERE, msg, params); } @Override public void info(String msg, Throwable ex) { logger.log(Level.INFO, msg, ex); } @Override public void info(String msg) { logger.log(Level.INFO, msg); } @Override public void info(Throwable ex) { if (ex == null) { logger.log(Level.INFO, null); } else { logger.log(Level.INFO, ex.getMessage(), ex); } } @Override public void info(String msg, Object... params) { logger.log(Level.INFO, msg, params); } @Override public void warn(String msg, Throwable ex) { logger.log(Level.WARNING, msg, ex); } @Override public void warn(String msg) { logger.log(Level.WARNING, msg); } @Override public void warn(Throwable ex) { if (ex == null) { logger.log(Level.WARNING, null); } else { logger.log(Level.WARNING, ex.getMessage(), ex); } } @Override public void warn(String msg, Object... params) { logger.log(Level.WARNING, msg, params); }}
同时实现“LoggerAdapterFacory”类,如下:
//==============================================================================//// @author Slive// @date 2013-6-18////==============================================================================package org.slive.logging.java;import org.slive.logging.LoggerAdapter;/*** The factory of implements logger adapter.if is in need,you can rewrite it.* @author Slive*/public class LoggerAdapterFacory{ public static LoggerAdapter getLoggerAdapter(Class clazz) { //TODO according to specific circumstance //such as 'LoggerJava' return new LoggerJavaAdapter(clazz); }}
其它实现,如下:
如有需要,可到http://download.csdn.net/detail/lipslive/5607375下载源码。
这样做的理由是:
1、(代码或者项目中)自定义一个日志模块,在团队开发中,是一个好的开发习惯;
2、对于开发者,一般只用到日志模块中常用的按照不同级别记录日志的功能,并不需要其它太多的功能,这样可以给调用的日志(logger)类进行瘦身;
3、自定义日志模块(接口及代理实现),而不直接使用第三方日志框架接口,避免在日志框架升级或者切换时,代码过多耦合。
这个举例说明一下:
比如,在某一项目开始时使用的是“log4j”框架,后面经过研究发现“sf4j”框架功能更强大,想切换到“sf4j”。常规的做法是,修改项目中每一处调用到“log4j”相关模块的代码。如果是项目比较大,所要花费的工作量也真不少,但如果使用了上面的方式,则只需要实现“LoggerAdapter”接口,使之与具体的日志(logger)进行适配,并且(如果必要)重写或者调整LoggerAdapterFacory类即可。
局限性:不能满足高级开发者的需要,但可以以此思路,进行深入改造后,还是可以满足的。
- 关于Java日志框架应用总结
- 关于Java日志框架应用总结
- java 日志框架总结
- Java 日志框架总结
- 关于Java日志框架的问题
- 关于JAVA框架应用的学习方法
- Java日志记录框架Logback配置详解(企业级应用解决方案)
- 关于java的总结,和知识框架
- 关于java类集框架的总结
- Java日志框架slf4j、jcl、jul、log4j1、log4j2、logback总结
- Java日志框架
- java 常用日志框架
- Java日志框架介绍
- java 日志框架统一
- Java日志框架
- java log4jdbc日志框架
- JAVA日志框架
- JAVA日志框架
- [转].net中Cache的应用
- 黑马程序员------java学习笔记之高新技术
- javascript中数据类型之间的转换
- 哈工大计算机网络实验一 :多线程服务器编程
- 俄罗斯方块AI_强化学习
- 关于Java日志框架应用总结
- C++
- sigslot简介
- java学习笔记之动态代理
- 关于表单的获取
- 判断字符串是否为回文
- c# 简单线程
- Qt MVC
- 如何cscope查看python代码