import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 日志代理类,在记录异常日志时,只传入一个异常对象也
* 能直接打印异常对象栈调用信息,并加上了日志开关。
*
* 但有个问题,如果log4j配置文件中的日志输出格式中有 %l
* 时不准确,记录的不是业务调用的方法位置,而是该类调用
* debug()、info()等方法的位置
* @author jzj
*/
public final class LogProxy implements Log {
/*
* 通用日志对象,可以是commons-logging的SimpleLog、Log4JLogger、
* Jdk14Logger
*/
private Log log;
/*
* 缓存日志代理,同一种日志只创建一个代理类,与commons-logging
* 创建日志实例原理一样:同一种日志(按str或claz来区分)只创建一个
*
* 多实例模式
*/
private static Map logMap = new HashMap();
/*
* 私有构造函数
*/
private LogProxy() {
}
private LogProxy(String str) {
log = LogFactory.getLog(str);
}
private LogProxy(Class claz) {
log = LogFactory.getLog(claz);
}
public static synchronized LogProxy getInstance(String str) {
LogProxy logProx = (LogProxy) logMap.get(str);
if (logProx == null) {
logProx = new LogProxy(str);
logMap.put(str, logProx);
}
return logProx;
}
public static synchronized LogProxy getInstance(Class claz) {
LogProxy logProx = (LogProxy) logMap.get(claz.getName());
if (logProx == null) {
logProx = new LogProxy(claz);
logMap.put(claz.getName(), logProx);
}
return logProx;
}
public void debug(Object obj, Throwable e) {
if (log.isDebugEnabled()) {
log.debug(obj, e);
}
}
public void debug(Object obj) {
if (log.isDebugEnabled()) {
if (Throwable.class.isInstance(obj)) {
log.debug(((Throwable) obj).getMessage(), (Throwable) obj);
} else {
log.debug(obj);
}
}
}
public void error(Object obj, Throwable e) {
if (log.isErrorEnabled()) {
log.error(obj, e);
}
}
public void error(Object obj) {
if (log.isErrorEnabled()) {
if (Throwable.class.isInstance(obj)) {
log.error(((Throwable) obj).getMessage(), (Throwable) obj);
} else {
log.error(obj);
}
}
}
public void fatal(Object obj, Throwable e) {
if (log.isFatalEnabled()) {
log.fatal(obj, e);
}
}
public void fatal(Object obj) {
if (log.isFatalEnabled()) {
if (Throwable.class.isInstance(obj)) {
log.fatal(((Throwable) obj).getMessage(), (Throwable) obj);
} else {
log.fatal(obj);
}
}
}
public void info(Object obj, Throwable e) {
if (log.isInfoEnabled()) {
log.info(obj, e);
}
}
public void info(Object obj) {
if (log.isInfoEnabled()) {
if (Throwable.class.isInstance(obj)) {
log.info(((Throwable) obj).getMessage(), (Throwable) obj);
} else {
log.info(obj);
}
}
}
public void warn(Object obj, Throwable e) {
if (log.isWarnEnabled()) {
log.warn(obj, e);
}
}
public void warn(Object obj) {
if (log.isWarnEnabled()) {
if (Throwable.class.isInstance(obj)) {
log.warn(((Throwable) obj).getMessage(), (Throwable) obj);
} else {
log.warn(obj);
}
}
}
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public boolean isErrorEnabled() {
return log.isErrorEnabled();
}
public boolean isFatalEnabled() {
return log.isFatalEnabled();
}
public boolean isInfoEnabled() {
return log.isInfoEnabled();
}
public boolean isTraceEnabled() {
return log.isTraceEnabled();
}
public boolean isWarnEnabled() {
return log.isWarnEnabled();
}
public void trace(Object arg0) {
log.trace(arg0);
}
public void trace(Object arg0, Throwable arg1) {
log.trace(arg0, arg1);
}
}
分享到:
相关推荐
logproxy 能为 HTTP 日志档案设置一个代理。 运行:node logproxy [listen port] [only log host,..] eg. 1.使用默认设置开启 logproxy :node logproxy 2. 监听端口 8088,只记录 'c.163.com' 和任意匹配 '126...
WebService代理类生成工具,能够将提供WebService的网址转成服务类。
webservice代理类生成工具,可以直接生成代理类,在VS中进行代码编辑
动态代理及其生成的代理类,可以反编译查看其类的结构。
WebService代理类生成工具1.0 ,可以直接编译成dll 能够一次生成多个web service的代理类,并直接编译成一个dll, 更多帮助:http://www.cnblogs.com/dengxinglin/p/3334158.html
利用wsdl.exe生成webservice代理类: 根据提供的wsdl生成webservice代理类 1、开始->程序->Visual Studio 2005 命令提示 2、输入如下红色标记部分 D:\Program Files\Microsoft Visual Studio 8\VC>wsdl /...
.net webservices 代理类,是一个动态配置的代理类,有源码,和demo
java动态代理类的实例
网神SecFox日志收集与分析系统_日志代理安装部署手册_【V20.1.1】.pdf
项目是eclipse工具生成的,解压后可直接导入到eclipseIDE工具中,在java_web.wsdl文件中写入调用webservices的wsdl内容,然后执行src下的build(ant工具),刷新目录后可在src下看到生成的代理类。 本工程适用与java...
代理模式java代码 Proxy(5) 2个代理类 开发宝典
动态代理设计模式 日志和源码 动态代理设计模式 日志和源码
第三章 代理类中间业务.ppt
1、不引用服务使用WCF,手动编写代理类 (客户端向服务端登录+心跳,服务端向客户端发送开关机命令) 2、局域网内远程开关机 (开机:广播模式,远程唤醒 关机:wcf调用客户端关机程序)
怎么用代理类,这里面进行了比较详细的解释,在开发过程中,代理类是非常重要的
WebService介绍(三):使用WebService代理类
webservice根据wsdl生成客户端代理类所需jar包,用Eclipse生成客户端代理类后所需jar包
动态代理类例子proxy动态代理类例子proxy动态代理类例子proxy
1.找到如下地址“C:\Windows\System32\cmd.exe” 命令行工具,右键以管理员身份运行(视系统...6.自此就完成了部署和代理类生成的所有操作,我们只需要在项目中实例化 ClientCode.cs 中的服务类 ,并调用其中的方法即可
springAOP等框架中,大量用到代理技术; 两类代理技术: 1,java动态代理,见JDK文档或相关java书;...2.cglib创建代理类,比第一种更加简单,代理类和背代理类不需要实现共同接口。本例子就是cglib代理的例子,很简单