下面这个类默认使用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是一种分组密码,它以128位为一个数据块进行加密,支持128、192和256位的密钥长度。在JDK中,AES加解密的核心类...
虽然JDK Logger在简单场景下已经足够使用,但在大型项目中,可能需要更强大和灵活的日志框架,如Log4j或Logback。这些框架提供了更多功能,如异步日志处理、更高级的过滤规则和更丰富的插件体系。 ### 总结 JDK ...
本篇将深入探讨如何利用JDK自带的日志包进行简单的日志应用。 首先,`java.util.logging.Logger`是日志系统的核心类,用于创建和管理日志消息。每个类都可以拥有自己的`Logger`实例,通过`Logger.getLogger()`方法...
JDK自带线程池分析 JDK 自带线程池是 Java 语言中用于管理和执行线程的工具,旨在提高多线程编程的效率和灵活性。本文将详细介绍 JDK 自带线程池的组成、创建方法、优点和常见应用场景。 多线程技术 多线程技术是...
jdk1.6支持的最高版本所有的log4jjar包
### JDK与Oracle JDK冲突及其环境变量调整方法 在IT领域,特别是软件开发过程中,经常会遇到不同版本或类型的Java运行环境(JRE)和Java开发工具包(JDK)之间的兼容性问题。本文将针对“JDK和Oracle JDK冲突修改...
Java Diary - JDK自带的Java数据库,这里主要讨论的是Apache Derby,一个完全的关系型数据库系统,它也是Java开发环境中的一部分。Derby,原名Cloudscape,由IBM开发并贡献给了Apache软件基金会,现在作为Apache的一...
本篇文章旨在详细介绍如何在Java中使用Log4j来管理日志,包括其配置方法以及与其他日志框架(如Commons Logging和JDK自带Logger)的对比。 #### 二、Jakarta Commons Logging (JCL) ##### 2.1 概述 Jakarta ...
在 Java 开发领域,深入理解并有效利用 Java 开发工具包(JDK)自带的各种虚拟机(VM)分析工具对于提高应用程序性能至关重要。本文将详细介绍 JDK 自带的几个核心 VM 分析工具:jps、jstat、jmap 和 jconsole,并...
### JConsole:JDK 自带的监控工具 #### 一、简介 JConsole是一款由Sun Microsystems(现已被Oracle收购)开发并集成于JDK 1.5及以上版本中的图形化监控工具。它能够帮助开发者及运维人员监测和诊断运行中的Java...
在使用Log4j2时,需要注意的是,由于部分jar包默认的日志系统可能是Log4j,因此,在集成到像Tomcat这样的Java应用服务器或者是JDK环境中时,可能需要设置默认的日志为Log4j2。这通常通过修改服务器或JDK的启动脚本,...
Log4j是Apache组织开发的一款广泛使用的Java日志框架,它为Java应用程序提供了一种灵活且强大的日志记录机制。Log4j的各个版本在功能、性能和安全性方面都有所不同,下面将详细介绍这些版本及其特点。 1. Log4j ...
数据库连接池是现代Web应用程序中不可或缺的部分,它有效地管理和复用数据库连接,提高了系统的性能和资源利用率。在Java中,我们可以使用多种库来创建数据库连接池,如C3P0、DBCP、HikariCP等。本示例将重点讨论...
3. 记录日志:使用`logger.log()`方法记录不同级别的日志。 ```java logger.info("这是信息日志"); logger.warning("警告信息"); logger.severe("严重错误"); ``` 4. 控制台输出格式:可以通过`java.util.logging....
jdk自带线程池实例详解 jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk...
当名称相同时,只会创建一个 `Logger` 实例,确保了资源的有效利用。 **代码示例**: ```java import java.util.logging.Logger; public class LoggingDemo { public static void main(String[] args) { Logger ...
如何更换Eclipse项目中的JDK自带jre图解。有很多java初学者导别人的项目时,常常会遇到项目报红,这是因为jdk位置发生了改变。除非你的jdk位置跟创建这个项目的人的位置一致。这个文档就是解决更换jdk,换成自己的jdk...
IDEA+Maven导入新包JDK版本冲突问题解决方案 IDEA 和 Maven 是 Java 开发中常用的集成开发环境和项目管理工具,但是当我们在 IDEA 中使用 Maven 管理项目时,可能会遇到 JDK 版本冲突问题。今天我们将讨论如何解决...
logger.log(Level.SEVERE, "发生严重错误"); logger.log(Level.INFO, "程序运行正常"); ``` 总之,Java Swing应用可以通过`java.util.logging`包中的`Logger`类,结合`logging.properties`配置文件或在代码中动态...