log4j.xml里实现读取变量${variable} (spring容器篇)

本文介绍了如何在log4j.xml中使用变量,并通过Spring容器动态设置系统属性,使得log4j在不同环境中读取正确日志配置。文中详细解释了遇到的问题及解决方案,包括System.setProperty、DOMConfigurator重新加载配置和MongoDbAppender的错误处理策略。
摘要由CSDN通过智能技术生成

log4j.xml里实现读取变量(spring容器篇)

  1. 需求背景

公司日志系统不太完善,集群的服务器日志散落在不同的服务器上,要从公司层面解决这个问题不太现实,目前的项目进度也不允许,当前系统会有很多对接,有上游下游,生产环境调试看日志太麻烦了, 所以准备自己动手做一个workaround。

 

另一方面,公司开发、上线有好几套环境,不可能每套环境都去改一次,用变量可以把对应信息写在zookeeper里,这样就可以一劳永逸了。

 

   2. 前期调研

之前用过mongodb,而且capped collection用来做非永久性日志非常合适,于是就从这方面入手。四处找了找下来分析下来觉得还是用log4j来把日志输入,一方面这个 org.log4mongo 包装了写mongodb的所有方面用起来方便,另一方面,一个logger.info就可以做到这样的效果对代码的入侵是很小的。

 

  3. 说干咱就干

首先pom里引入所需要的jar包,这里注意log4mongo只适用log4j 版本1.2.15 及以上。

 

 

<!-- for MongoDbAppender start -->
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>2.12.4</version>
		</dependency>
		<dependency>
			<groupId>org.log4mongo</groupId>
			<artifactId>log4mongo-java</artifactId>
			<version>0.7.4</version>
		</dependency>
		<!-- for MongoDbAppender end -->

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
		</dependency>

 log4j.xml里加入以下:

 

 

<appender name="mongoDBAppender" class="org.log4mongo.MongoDbAppender">
		<param name="hostname" value="${hostName}" />
		<param name="port" value="${port}" />
		<param name="databaseName" value="${databaseName}" />
		<param name="collectionName" value="${collectionName}" />
	</appender>

	<appender name="asynAppender" class="org.apache.log4j.AsyncAppender">
		<param name="bufferSize" value="100000" />
		<appender-ref ref="mongoDBAppender" />
	</appender>

	<logger name="com.xxx.xxx" additivity="false">
		<level value="INFO" />
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="asynAppender" />
	</logger>

 

 

注意上面的log4j.xml里我用到了类似这样的 ${hostName} 变量读取。<

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值