- 浏览: 253287 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
mabusyao:
漠北空城 写道请问下,你这个是JDK版本是多少呢?!忘记了,应 ...
HashMap 源码解读 -
漠北空城:
请问下,你这个是JDK版本是多少呢?!
HashMap 源码解读 -
schumee:
完美团队~
项目沉思录 - 1.1 -
winie:
整理下 搞成引擎嘛 国产需要这样的engine
简单工作流引擎 -
mabusyao:
某位同学给我提供的堪称完美的解决方案:1. 将三个int数组放 ...
CraneWork
看了STRUTS2的源码,了解了它的logging系统,觉得还是蛮有意思的,用到了很多设计模式。
先看类结构图:
1. 工厂方法模式
这个就不说了,直接明了。
2. 伪单例模式
LoggerFactory是个抽象方法,同时里面也包含了对于LoggerFactory的伪单例实现。为什么是伪单例,因为看起来像是单例模式,但其实你也可以创建多个实例:
public static void setLoggerFactory(LoggerFactory factory) { lock.writeLock().lock(); try { LoggerFactory.factory = factory; } finally { lock.writeLock().unlock(); } } protected static LoggerFactory getLoggerFactory() { lock.readLock().lock(); try { if (factory != null) { return factory; } } finally { lock.readLock().unlock(); } lock.writeLock().lock(); try { if (factory == null) { try { Class.forName("org.apache.commons.logging.LogFactory"); factory = new com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory(); } catch (ClassNotFoundException ex) { // commons logging not found, falling back to jdk logging factory = new JdkLoggerFactory(); } } return factory; } finally { lock.writeLock().unlock(); } }
这里还用到了concurrent包里面的ReentrantReadWriteLock锁,看着使用方法貌似还蛮简单的,以后可以将这个类放到工具箱里。
3. 模板方法模式
LoggerFactory:
public static Logger getLogger(Class<?> cls) { return getLoggerFactory().getLoggerImpl(cls); } public static Logger getLogger(String name) { return getLoggerFactory().getLoggerImpl(name); } protected abstract Logger getLoggerImpl(Class<?> cls); protected abstract Logger getLoggerImpl(String name);
JdkLoggerFactory:
public class JdkLoggerFactory extends LoggerFactory { @Override protected Logger getLoggerImpl(Class<?> cls) { return new JdkLogger(java.util.logging.Logger.getLogger(cls.getName())); } @Override protected Logger getLoggerImpl(String name) { return new JdkLogger(java.util.logging.Logger.getLogger(name)); } }
4. 代理模式
JDKLogger并没有做任何事情,而是直接代理给了java.util.logging.Logger类:
public class JdkLogger implements Logger { private java.util.logging.Logger log; public JdkLogger(java.util.logging.Logger log) { this.log = log; } public void error(String msg, String... args) { log.log(Level.SEVERE, LoggerUtils.format(msg, args)); } ... }
发表评论
-
大数据下的实体解析
2016-07-07 12:03 671大数据时代的实体解析困境 <!--[if !sup ... -
中文相似度匹配算法
2015-12-30 14:44 1921基于音形码的中文字 ... -
各种语言写的wordcount
2015-09-24 16:07 0Java版本: String input ... -
数组双指针算法的研究
2015-07-14 16:59 2460双指针算法在数组/链 ... -
初识ThreadLocal
2015-07-07 13:15 1515最近公司在进行Java开发人员的招聘活动,其中有一道面试题 ... -
摩尔投票法
2015-06-30 20:13 18413摩尔投票法 提问: 给定一个int型数组,找出该数 ... -
(转)最长回文字串算法
2015-01-18 14:30 1437来自(http://blog.163.com/zhaohai ... -
小心寄存器
2012-11-08 13:53 4试试这段代码就知道了 public cla ... -
简单工作流引擎
2012-07-06 16:58 2414从公司的一个项目中挖出来的工作流引擎的代码,虽然是一个很简单的 ... -
Always clean the ThreadLocal variables.
2012-05-24 09:16 1216Any variable stored in ThreadLo ... -
在线词典的数据结构实现。
2012-05-18 08:37 0昨天在网上看到了一道百度的面试题: Baidu写道 ... -
Log4j 代码学习 - Factory
2012-05-17 08:47 1109我们最早提到,Log4j的初始代码在LogManager的静态 ... -
Log4j 代码学习 - Appender
2012-05-16 09:09 1356在上一篇文章里,我们 ... -
Log4j 代码学习
2012-05-15 14:58 1162最近闲来无事,正好手头上有Log4j的代码,于是就拿来学习了下 ... -
存储中间计算结果的动态规划算法
2012-04-18 15:50 1217public class RodCutting { ... -
java7中的ThreadLocalRandom(转)
2012-01-20 09:08 4348今天早上看到一个关于java7中的ThreadLocalRan ... -
(转)追MM与23种设计模式
2011-11-16 14:13 9991、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德 ... -
(转)Java 参数列表
2011-11-05 19:48 2925下面的讨论以Windows ... -
(转)TOMCAT源码分析
2011-10-17 16:06 2136TOMCAT源码分析(启动框架 ... -
java写的四则运算器
2011-08-19 22:19 2723本打算做一个从RE到NFA的转换器,思路已经理清了,但是在动手 ...
相关推荐
commons-logging-1.0-javadoc.jar, commons-logging-1.0.1-javadoc.jar, commons-logging-1.0.1.jar, commons-logging-1.0.2-javadoc.jar, commons-logging-1.0.2.jar, commons-logging-1.0.3-javadoc.jar, commons-...
`commons-logging-1.1-src` 压缩包包含了 Commons Logging 1.1 版本的源代码,这对于理解和定制其功能非常有帮助。在 Eclipse 这样的集成开发环境中,你可以通过配置这个源码位置来查看 Commons Logging 的内部工作...
赠送jar包:jboss-logging-3.4.1.Final.jar; 赠送原API文档:jboss-logging-3.4.1.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.1.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.1.Final....
common-logging是apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。...
赠送jar包:jboss-logging-3.3.2.Final.jar; 赠送原API文档:jboss-logging-3.3.2.Final-javadoc.jar; 赠送源代码:jboss-logging-3.3.2.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.3.2.Final....
在Struts2框架中,它依赖于各种第三方库来实现其功能,其中之一便是`commons-logging-1.1`。这个库是Apache Commons项目的一部分,提供了一个统一的日志接口,使得开发者可以在不关心具体日志实现的情况下进行日志...
赠送jar包:jboss-logging-3.4.3.Final.jar; 赠送原API文档:jboss-logging-3.4.3.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.3.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.3.Final....
spring-framework & commons-logging spring-framework & commons-logging spring-framework & commons-logging spring-framework & commons-logging spring-framework & commons-logging spring-framework & ...
包含Struts2框架的核心类库,以及Struts2的第三方插件类库 struts2-core-2.0.14 xwork-2.0.7 ognl-2.6.11 commons-logging-1.0.4 freemarker-2.3.8 等等。
2. `commons-logging-api-1.2.jar`(可能包含):如果存在,这个文件包含了仅接口的版本,用于与旧版本的兼容。 3. 文档文件:如Javadoc,提供了API的详细文档,帮助开发者理解和使用库中的类和方法。 4. `LICENSE....
赠送jar包:commons-logging-1.2.jar; 赠送原API文档:commons-logging-1.2-javadoc.jar; 赠送源代码:commons-logging-1.2-sources.jar; 包含翻译后的API文档:commons-logging-1.2-javadoc-API文档-中文...
赠送jar包:commons-logging-1.1.3.jar; 赠送原API文档:commons-logging-1.1.3-javadoc.jar; 赠送源代码:commons-logging-1.1.3-sources.jar; 赠送Maven依赖信息文件:commons-logging-1.1.3.pom; 包含翻译后...
commons-logging-1.1.3.jar, dwr-1.1.1.jar, ezmorph-1.0.6.jar, freemarker-2.3.23.jar, google-collections-1.0.jar, google-gxp-0.2.4-beta.jar, hamcrest-core-1.3.jar, jackson-annotations-2.6.0.jar, jackson...
赠送jar包:commons-logging-1.1.3.jar; 赠送原API文档:commons-logging-1.1.3-javadoc.jar; 赠送源代码:commons-logging-1.1.3-sources.jar; 赠送Maven依赖信息文件:commons-logging-1.1.3.pom; 包含翻译后...
spring依赖的common-logging jar包
在标题"commons-logging-1.2_commonslogging_"中提到的"commons-logging-1.2.jar"就是这个库的1.2版本,它是Spring框架中常用的一个依赖,用于处理日志记录。 Spring框架广泛使用Commons Logging作为其默认的日志...
赠送jar包:commons-logging-1.2.jar; 赠送原API文档:commons-logging-1.2-javadoc.jar; 赠送源代码:commons-logging-1.2-sources.jar; 包含翻译后的API文档:commons-logging-1.2-javadoc-API文档-中文...
在felix中使用pax-logging-service pax-logging-api-1.7.3.jar,pax-logging-service-1.7.3.jar,pax-confman-propsloader-0.2.3.jar 在system.properties中加入bundles.configuration.location=conf conf\services\...
赠送jar包:commons-logging-1.1.1.jar 赠送原API文档:commons-logging-1.1.1-javadoc.jar 赠送源代码:commons-logging-1.1.1-sources.jar 包含翻译后的API文档:commons-logging-1.1.1-javadoc-API文档-中文...
spring-boot-starter-logging-1.5.4.RELEASE.jar