- 浏览: 247323 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
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 2414双指针算法在数组/链 ... -
初识ThreadLocal
2015-07-07 13:15 1461最近公司在进行Java开发人员的招聘活动,其中有一道面试题 ... -
摩尔投票法
2015-06-30 20:13 18268摩尔投票法 提问: 给定一个int型数组,找出该数 ... -
(转)最长回文字串算法
2015-01-18 14:30 1392来自(http://blog.163.com/zhaohai ... -
小心寄存器
2012-11-08 13:53 4试试这段代码就知道了 public cla ... -
简单工作流引擎
2012-07-06 16:58 2340从公司的一个项目中挖出来的工作流引擎的代码,虽然是一个很简单的 ... -
Always clean the ThreadLocal variables.
2012-05-24 09:16 1170Any variable stored in ThreadLo ... -
在线词典的数据结构实现。
2012-05-18 08:37 0昨天在网上看到了一道百度的面试题: Baidu写道 ... -
Log4j 代码学习 - Factory
2012-05-17 08:47 1074我们最早提到,Log4j的初始代码在LogManager的静态 ... -
Log4j 代码学习 - Appender
2012-05-16 09:09 1305在上一篇文章里,我们 ... -
Log4j 代码学习
2012-05-15 14:58 1121最近闲来无事,正好手头上有Log4j的代码,于是就拿来学习了下 ... -
存储中间计算结果的动态规划算法
2012-04-18 15:50 1176public class RodCutting { ... -
java7中的ThreadLocalRandom(转)
2012-01-20 09:08 4289今天早上看到一个关于java7中的ThreadLocalRan ... -
(转)追MM与23种设计模式
2011-11-16 14:13 9581、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德 ... -
(转)Java 参数列表
2011-11-05 19:48 2850下面的讨论以Windows ... -
(转)TOMCAT源码分析
2011-10-17 16:06 2056TOMCAT源码分析(启动框架 ... -
java写的四则运算器
2011-08-19 22:19 2657本打算做一个从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 是 struts2.1.6 中用的一个类库,这是它的源码压缩包,在 Eclipse 里配置源码位置即可。
赠送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....
赠送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会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。...
commons-logging-1.1.3.jar, commons-validator-1.3.1.jar, core-0.6.2.jar, dwr-1.1.1.jar, ezmorph-1.0.6.jar, freemarker-2.3.22.jar, google-collections-1.0.jar, google-gxp-0.2.4-beta.jar, guava-r09.jar, ...
commons-logging-1.1 是 struts-2.1.6 中用的一个类库,这是它的 javadoc 压缩包,在 Eclipse 里配置 javadoc 位置即可
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 等等。
赠送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....
赠送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文档-中文...
commons-logging-1.0.4.jar freemarker-2.3.8.jar ognl-2.6.11.jar struts2-core-2.0.11.jar xwork-2.0.4.jar
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; 包含翻译后...
赠送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文档-中文...
commons-logging-1.2源码(commons-logging-1.2-src.zip)
有人向我要,所以传上来! 错误信息:java.lang.ClassNotFoundException: org.jboss.logging.BasicLogger 解决办法:加入jboss-logging-3.1.0.GA.jar就好了。hibernate4日志机制改了
赠送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-sources.jar资源