下面这个类默认使用JDK自带的logger,如系统存在org.apache.commons.logging则动态加载并用反射来调用,如进一步,系统中还存在Log4j及其配置,则自动使用Log4j代替commons logging, 这样程序包发布时根本无须将commons logging或log4j放在POM中。
package com.github.drinkjava2.jsqlbox;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* For log output
*
* @author Yong Zhu
* @version 1.0.0
* @since 1.0.0
*/
public class SqlBoxLogger {
private Object commonLogger;
private Method commonLoggerInfoMethod;
private Method commonLoggerErrorMethod;
private Logger jdkLogger;
public SqlBoxLogger(Class<?> targetClass) {
if (targetClass == null)
throw new AssertionError("SqlBoxLogger error: targetClass can not be null.");
try {
Class<?> logFactoryClass = Class.forName("org.apache.commons.logging.LogFactory");
Method method = logFactoryClass.getMethod("getLog", new Class[] { Class.class });
commonLogger = method.invoke(logFactoryClass, new Object[] { targetClass });
commonLoggerInfoMethod = commonLogger.getClass().getMethod("info", new Class[] { Object.class });
commonLoggerErrorMethod = commonLogger.getClass().getMethod("error", new Class[] { Object.class });
} catch (Exception e) {
SqlBoxException.eatException(e);
}
if (commonLogger == null)
jdkLogger = Logger.getLogger(targetClass.getName());
}
public static SqlBoxLogger getLog(Class<?> targetClass) {
return new SqlBoxLogger(targetClass);
}
public void info(String msg) {
if (jdkLogger != null) {
jdkLogger.log(Level.INFO, msg);
return;
}
try {
commonLoggerInfoMethod.invoke(commonLogger, new Object[] { msg });
} catch (Exception e) {
throw new AssertionError(e.getMessage());
}
}
public void error(String msg) {
if (jdkLogger != null) {
jdkLogger.log(Level.WARNING, msg);
return;
}
try {
commonLoggerErrorMethod.invoke(commonLogger, new Object[] { msg });
} catch (Exception e) {
throw new AssertionError(e.getMessage());
}
}
}
分享到:
相关推荐
利用jdk自带算法实现的AES加解密工具类及Base64编解码工具类、 文件操作工具类、aes扩展无限制权限策略文件等。 在jdk1.7环境亲测通过。
JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax
本案例详细介绍了JDK自带线程池,与spring的线程池相比,其更好,希望对大家有帮助
jdk1.6支持的最高版本所有的log4jjar包
JDK和ORACLE JDK冲突修改环境变量
JDK自带调试工具doc JDK自带调试工具doc JDK自带调试工具doc
NULL 博文链接:https://antlove.iteye.com/blog/1924832
使用jdk自带的jar工具打jar包 采用命令行的方式 方便 快捷
详细介绍了jdk自带的工具的使用方法等 JDK自带工具分析 1 1、工具分类概括: 2 1.1、基本工具 2 1.2、安全工具 3 1.3、Java国际化工具 3 1.4、远程方法调用工具 3 1.5、Java IDL and RMI-IIOP 工具 3 1.6、Java 部署...
JDK自带的jarsigner签名工具帮助文档,指导大家用自带的JDK通过控制台签名apk;主要指令如下:jarsigner -verbose -keystore [您的签名存放路径]-signedjar [签名后的文件名] [未签名的文件名] [您的证书名称]
NULL 博文链接:https://samjavaeye.iteye.com/blog/938657
JDK自带VM分析工具jps,jstat,jmap,jconsole
Java Diary - JDK自带的java数据库,并且是完全的关系型书库据----Derby
Log4j的jar 有1.2.6 1.2.8 1.2.12 1.2.15
jdk-6u27-windows-i586.exe 安装文件,在win7下没有安装上自带的数据库derby。在虚拟机(XP)上安装时,有。就拷贝到win7下,可以使用。遂上传到csdn。我是用JDK6-27update版的JDK的。
如何更换Eclipse项目中的JDK自带jre图解。有很多java初学者导别人的项目时,常常会遇到项目报红,这是因为jdk位置发生了改变。除非你的jdk位置跟创建这个项目的人的位置一致。这个文档就是解决更换jdk,换成自己的jdk...
Jconsole是Sun jdk 1.5以上版本自带的监控工具,可以对JVM进行全面的监控
JDK自带工具之jinfo.docx
log4j的升级版本,包含日志配置文件,要注意的是部分jar包的日志默认是log4j,需要在tomcat、jdk等其他中间件设置默认日志
简单建立数据库连接池及简单包装查询代码 使用JDK自带日志输出日志