log4j2研究之配置文件模块化

模块化作为软件开发领域里的重要思想之一,我们在实际的工作中处处都能看到其身影。本文将尝试将这种思路应用到log4j2的配置文件中。

1. 概述

在软件开发领域,日志总是非常基础且重要的一环。log4j2作为Java领域里日志框架的佼佼者,后发优势使其迅速获得众多开发者的青睐。

XML配置作为log4j2官方的首推配置方式,被绝大多数开发人员所熟知。但XML语言天然的繁琐啰嗦的语法格式,以及具体业务场景下对日志的精密划分,势必导致我们的log4j2.xml 这个配置文件变得非常臃肿、庞大;于是一个改良思路顺理成章地出现了:我们是否可以将这个文件拆分成多个配置文件,最后再将这些配置文件组装成为一个完整的配置?答案当然是肯定的,接下来笔者就介绍实现这种想法的两种思路。

2. XInclude实现

这种实现方式其实和log4j2本身没有太大的关系,这个属于XML自带的一种模块化思路,具体的可以参见笔者在下面给出的链接。这里就不作过多的纠结,具体的实现方式在官方文档里也已经给出了,读者可以自行查阅(相应的官方文档地址笔者在下面也已给出)。

这里还是给出一些笔者在实际运用过程中遇到的一些注意事项:

  1. <xi:include /> 节点的放置位置很重要。对于include节点导入的内容, 有先后顺序之别。
  2. 如果 <properties> 想要覆盖 log4j2-xinclude-properties.xml 中定义的属性, 则需要保证 <properties> 在先,而在后。
  3. log4j2-xinclude-appenders.xml 中如果用到了 log4j2-xinclude-properties.xml 中配置的属性,则必须 log4j2-xinclude-properties.xml 在先。
  4. 节点之间的覆盖是整体覆盖,例如下面样例中的 <properties> , 属于 <properties> 节点覆盖,而不是里面单个 <property> 的重复覆盖。而且xinclude文件中定义时,必须是顶级节点(即Appenders/Loggers/Properties等。)
  5. 之前所谈到的覆盖都是 先到者优先,即保留排名在前的配置项。
  6. 样例XML如下:
    <!--主体log4j2.xml配置文件-->
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="error" xmlns:xi="http://www.w3.org/2001/XInclude">
        <!-- this will override the log pattern defined in the included log4j-properties.xml -->
        <!--这里定义的Properties将覆盖log4j2-xinclude-properties.xml定义的内容, 注意是全部覆盖, 不仅仅是log-pattern属性. 即使log4j2-xinclude-properties.xml中的Properties也许拥有更多的配置项。-->
        <Properties>
            <Property name="log-pattern">jit %d %-5p [%t] %C{1.} - %m%n</Property>
        </Properties>
    
        <xi:include href="log4j2-xinclude-properties.xml" />
        <xi:include href="log4j2-xinclude-appenders.xml" />
    </Configuration>
    
    <!-- log4j2-xinclude-properties.xml -->
    <?xml version="1.0" encoding="UTF-8"?>
    <Properties>
        <!-- define the log pattern as a property so that it can be overridden -->
        <Property name="log-pattern">%d %-5p [%t] %C{1.} - %m%n</Property>
    </Properties>
    

注意

  • 这种方式之下,应用所部署的路径中不能包含有中文。

3. Composite Configuration实现

笔者在查找上一种解决方案的过程中,偶然在官网上看到了另外一种实现思路,也就是LOG4J2中论述的Composite Configuration(这里也可以看出LOG4J2的后发优势真是相当巨大,开发人员吸取了大量之前LOG框架的教训并将之在log4j2中进行了解决)。

官方文档里并没有给出相应的示例,笔者结合官方给出的文档,再经过一番源码追踪后,大致实现了一个可运行的版本。

  1. 首先你需要配置一个名为log4j.configurationFile的配置项(关于这个配置项,你可以在ConfigurationFactory类中找到),该配置项将指定log4j2的配置文件所在位置。注意这个配置项是可以指定多个配置文件的,你需要做的只是使用逗号将它们分开(注意这个逗号目前是写死在代码里的,具体位置是ConfigurationFactory.Factory类的getConfiguration(LoggerContext, String, URI)方法中)。

  2. 第一步提到的配置项,你需要将其放到classpath下新建的log4j2.component.properties文件中(该文件名是在PropertiesUtil类中定义的)。

  3. 第二步有一个替换操作,就是将log4j.configurationFile的配置项注册到系统属性中。

  4. 以上三步的逻辑主要涉及到ConfigurationFactory.Factory.getConfiguration()PropertiesUtil.getProperties().getStringProperty()。读者可自行阅读相应的源码来做到成竹于胸。

  5. 最后给出一个配置示例:

    # 定义在classpath下的 log4j2.component.properties 文件
    log4j.configurationFile=log4j2-test.xml,log4j2-test2.xml
    
  6. 关于配置之间的属性覆盖问题以及其他实现细节,可以参见官方文档说明,笔者就不重复了。

注意

  • 这种方式之下,每个配置文件必须满足log4j2.xml的格式,例如XML情况下要以<Configuration>为根节点。

4. Links

  1. XML Inclusions (XInclude)
  2. StackOverflow - log4j2 - include
  3. log4j2-XInlcude官方文档
  4. 自定义Log4j2配置文件位置
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ExtJs简介: Extjs在经过两年的发展,Ext JS从2.0版开始,越来越受用户欢迎,今年,Extjs不但推出3.0版本,而且还推出了Ext Core,准备在Web2.0网站开发中占一席之地,如在 Extjs2.x版本中为人所诟病的速度问题在ExtJs3.0中有所改善。不过,最革命性的改变还是ExtJs中新增的Ext.Direct功能,它实现了服务器端的无关性。 在3.2版本中,Ext将增加移动组件,进军移动市场,这将是一次革命性的改进,同时在4.0版本中,除了对HTML5的支持外,还增加画布功能。 还有一点更值得期待,就是Ext的RAD开发工具也在开发当中。估计在不久之后,也可以向VB,C#一样,通过可视化工具拖拽方式即可轻松开发Web应用。 ExtJs在发展过程中不仅一步步地巩固着自己在HTML、CSS、JavaScript领域无可比拟的优势,而且已经开始向相关领域发展扩张。如从2.02版开始为Adobe的RIA技术AIR提供支持,并且为GWT开发了Ext GWT2.0,这些都体现了ExtJs的强大活力和生命力。 在可预见的未来,ExtJs将会甩开对手,大踏步向前。 ExtJs的前景: ExtJS的前景是非常好的,现在的QQ2009的登录界面以及使用,迅雷最新版的主界面,都能够找到这个框架的踪迹。web QQ也是有一个技术版本是使用这种框架的,所以,可以看出,extjs的应用,是越来越广泛了,extjs的前景,不可估量,不论站在技术开发的层次还是大部分用户的使用体验。 国讯教育通用智能OA办公系统项目培训目标 本系列讲座分为四大部分: 1、ExtJs基础篇:主要介绍Ext Core的一些核心功能 2、ExtJs进阶篇:主要介绍ExtJs里的常用组件,容器及布局 3、ExtJs数据篇:主要介绍和数据库交互的相关组件及CRUD功能 4、项目实战篇: Extjs3.2+ASP.NET七层架构+设计模式+ log4j+WebSerice等技术国讯教育通用智能OA办公平台 适用对象 1、要求有一定的javascript语言和HTML,CSS基础的学员 2、有一定的Asp.net网页编程基础和C#语言基础 3、有志于从事富客户端技术ExtJs的学习与研究的学生及专业Web开发人员 模块介绍 1、ExtJs基础篇-ExtJs快速入门 1.1、ExtJs基础篇(1):ExtJs概述与环境配置及架构剖析 1.2、ExtJs基础篇(2):ExtJs OOP基础 1.3、ExtJs基础篇(3):ExtJs 核心函数简介 1.4、ExtJs基础篇(4):ExtJs中的模板详解(1) 1.5、ExtJs基础篇(5):ExtJs中的模板详解(2) 2、ExtJs进阶篇:Extjs进阶 2.1、大话ExtJs中的布局 2.2、ExtJs的常见组件 2.3、ExtJs中的面板及Window窗口 2.4、ExtJs中的选项卡面板 2.5、ExtJs中的对话框与Combox组件 2.6、ExtJs中的ExtTree详解 3、ExtJs数据篇 3.1、数据存储基本单元Record与DataField详解 3.2、数据存储Store详解1 3.3、数据存储Store详解2 3.4、数据代理DataProxy详解 3.5、数据读取器DataReader详解 3.6、Ext.Direct详解1 3.7、Ext.Direct详解2 4、ExtJs实战篇—国讯教育通用智能OA办公平台 (共70讲) 4.1、系统业务流程主功能结构分析 4.2、数据库设计 4.3、抽象工厂+反射七层架构设计 4.4、首页布局设计 4.5、人事管理模块分析设计 4.6、个人专区模块分析设计 4.7、日程管理区模块分析设计 4.8、文档管理模块分析设计 4.9、工单管理模块分析设计 4.10、工资管理模块分析设计 4.11、内部邮箱模块分析设计 4.12、系统管理模块分析设计 4.13、考勤管理模块分析设计 4.14、消息管理模块分析设计 4.15、日志管理 4.16、报表打印及数据统计 4.17、数据导入导出管理 本项目所涉及到的技术: 数据库方面: 1、PD数据库建模 2、SQL Server2005视图、存储过程、用户自定义函数、触发器 ASP.net方面: 1、ASP.net PetShop七层架构 2、抽象工厂+反射+配置文件实现数据库无缝切换 3、序列化/反序列化+泛型集合的应用 4、利用ASP.net HttpHandler实现防盗链 5、网站安全性方面:ASP.net防SQL注入及Web Service Soap头加密技术 6、AS
iBase4J是Java语言的分布式系统架构。使用Spring整合的开源框架。 iBase4J特点: 使用Maven对项目进行模块化管理,提高项目的易开发性、扩展性。 系统包括4个子系统:系统管理Service、系统管理Web、业务Service、业务Web。 系统管理:包括用户管理、权限管理、数据字典、系统参数管理等等。 业务相关:您的业务开发。 可以无限的扩展子系统,子系统之间使用Dubbo或MQ进行通信。 iBase4J主要功能: 1、数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。 2、持久层:mybatis持久化,使用MyBatis-Plus优化,减少sql开发量;aop切换数据库实现读写分离。Transaction注解事务。 3、MVC:基于spring mvc注解,Rest风格Controller。Exception统一管理。 4、调度:Spring+quartz, 可以查询、修改周期、暂停、删除、新增、立即执行,查询执行记录等。 5、基于session的国际化提示信息,职责链模式的本地语言拦截器,Shiro登录、URL权限管理。会话管理,强制结束会话。 6、缓存和Session:注解redis缓存数据;shiro实现redis分布式session同步,重启服务会话不丢失。 7、多系统交互:Dubbo,ActiveMQ多系统交互,ftp/sftp/fastdafs发送文件到独立服务器,使文件服务分离。 8、前后端分离:没有权限的文件只用nginx代理即可。 9、日志:log4j2打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 10、QQ、微信、新浪微博第三方登录。 11、工具类:excel导入导出,汉字转拼音,身份证号码验证,数字转大写人民币,FTP/SFTP/fastDFS上传下载,发送邮件,redis缓存,加密等等。 技术选型: 核心框架:Sring boot + Spring Framework + Dubbo + ibase4j-common 安全框架:Apache Shiro 任务调度:Spring + Quartz 持久层框架:MyBatis + MyBatis-Plus 数据库连接池:Alibaba Druid 缓存框架:Redis 会话管理:Spring-Session 日志管理:SLF4J、Log4j2 前端框架:Angular JS + Bootstrap + Jquery 启动说明: * 项目依赖activemq、Redis和ZooKeeper服务。 * 使用nginx代理UI:修改配置里的UI目录后重启nginx。 * 启动方法: SysServiceApplication.java SysWebApplication.java * 测试环境打包命令: clean package -P test * 生产环境打包命令: clean package -P product

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值