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...
1. **Web服务代理类**:Web服务代理类是.NET框架自动生成的C#类,它封装了与Web服务通信的所有细节。这些类通常由`svcutil.exe`工具或Visual Studio IDE自动生成,根据WSDL(Web服务描述语言)文档创建。代理类包含...
WebService代理类生成工具是一种实用的开发辅助工具,主要用于简化C#开发者在处理ASMX类型的Web服务时的工作流程。它能够自动生成与给定WebService接口对应的客户端代理类,使得调用远程服务如同调用本地方法一样...
根据提供的文档内容,以下是关于网神SecFox日志收集与分析系统V5.0_7.1.0日志代理安装部署手册的知识点: 1. 知识产权声明:文档中明确声明,所有版权归奇安信集团所有,未经许可,任何个人或机构不得复制或引用...
### 手动生成WSDL代理类:深入理解与实践 在软件开发中,Web Service作为一种流行的分布式计算模型,允许不同应用程序之间进行数据交换和方法调用,而WSDL(Web Services Description Language)则作为描述Web ...
.NET Webservices 代理类是.NET Framework为方便开发者调用Web服务提供的一种重要工具。 首先,我们需要理解什么是代理类。在编程中,代理类是一种特殊类型的类,它作为客户端与远程服务之间的中介。当客户端需要...
利用wsdl.exe生成webservice代理类: 根据提供的wsdl生成webservice代理类 1、开始->程序->Visual Studio 2005 命令提示 2、输入如下红色标记部分 D:\Program Files\Microsoft Visual Studio 8\VC>wsdl /...
WebService代理类生成工具1.0 ,可以直接编译成dll 能够一次生成多个web service的代理类,并直接编译成一个dll, 更多帮助:http://www.cnblogs.com/dengxinglin/p/3334158.html
动态代理设计模式是一种在运行时创建代理对象的技术,它允许我们为现有的对象提供额外的功能,如日志记录、性能监控、事务管理等,而无需修改原对象的代码。这种模式在Java和许多其他编程语言中都有应用,尤其在...
例如,访问控制、日志记录、事务管理等都可以通过代理类来实现。动态代理类则更进一步,它允许我们在程序运行时动态地创建代理对象,而无需预先编写具体的代理类代码。 要使用动态代理类,目标对象必须实现至少一个...
代理对象可以在调用目标对象的方法之前或之后执行额外的操作,例如数据验证、日志记录、性能监控等。这样,我们可以在不修改原始目标对象的前提下,增加其功能或控制其行为。 代理模式主要有静态代理和动态代理两种...
动态代理及其生成的代理类,可以反编译查看其类的结构。
在本项目中,我们将探讨如何在Java 1.8环境下配置和使用Spring AOP,以及如何生成代理类。 首先,Spring AOP是Spring框架的核心组件之一,它通过代理模式实现。在Java 1.8环境下,Spring AOP支持两种类型的代理:...
Java动态代理是Java语言提供的一种高级特性,它允许我们在运行时创建一个代理对象来代替某个接口或类的对象,这个代理对象能够对方法调用进行拦截和处理。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`...
在本篇中,我们将重点讨论如何使用WebService的代理类来调用和实现跨平台的数据交互。 首先,理解WebService的核心概念是关键。WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的应用程序接口(API),它...
在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。下面将详细解释这两个关键组件以及如何使用DOM4J库和CGLIB实现动态代理。 1. **Java动态代理原理** -...
在编程领域,代理类(Proxy Class)是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在C++中,代理类通常用于在原对象的基础上添加额外的功能或者控制原对象的访问方式。这种模式在很多场景下都...
在编程领域,代理类(Delegate)是一种非常重要的设计模式,它允许我们为对象提供一个代理,以控制对原对象的访问。在这个特定的场景中,"代理类的小小应用" 提到的压缩包内容可能是一个示例项目,展示了如何利用...
动态代理允许我们在运行时创建符合特定接口的新类,从而实现对JDBC操作的增强,例如事务管理、日志记录、性能监控等。在这个例子中,博主键盘太阳(keyboardsun)展示了如何通过Java的`java.lang.reflect.Proxy`类和...
项目是eclipse工具生成的,解压后可直接导入到eclipseIDE工具中,在java_web.wsdl文件中写入调用webservices的wsdl内容,然后执行src下的build(ant工具),刷新目录后可在src下看到生成的代理类。 本工程适用与java...