logback+jms appender+filter

上午搞定了使用aop方式来记录日志,根据上回分析,下午继续弄头儿要求的logback+jms appender+日志filter

 

关于jms appender可是把我头疼坏了,上网查找相关的信息,竟然没有一个成功的案例,于是乎,开始找些英文的论坛文章看,在logback.xml中加入了如下的配置:

 

	<appender name="jms" class="ch.qos.logback.classic.net.JMSQueueAppender">
		<InitialContextFactoryName>
			org.apache.activemq.jndi.ActiveMQInitialContextFactory
		</InitialContextFactoryName>
		<ProviderURL>tcp://ip:port</ProviderURL>
		<QueueConnectionFactoryBindingName>ConnectionFactory</QueueConnectionFactoryBindingName>
		<QueueBindingName>cdata.response.musicproducttest</QueueBindingName>
	</appender>
 

 

但是始终报一个错误(截取部分)

 

at javax.naming.NameNotFoundException: data.response.musicproducttest
at  at org.apache.activemq.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:225)
at  at javax.naming.InitialContext.lookup(InitialContext.java:392)
at  at ch.qos.logback.core.net.JMSAppenderBase.lookup(JMSAppenderBase.java:36)
at  at ch.qos.logback.classic.net.JMSQueueAppender.start(JMSQueueAppender.java:109)
 

 

 

不知道为什么,于是请教有经验的同事,读了logback的源码,最终发现,原来是因为logback找不名称为到data.response.musicproducttest的队列,需要在jndi中进行声明,于是加了jndi.properties文件进buildpath,于是问题完美解决!

 

接下来,需要根据日志的内容,对日志不同输出进行不同队列的写入。先不考虑往队列里发(因为此时,同事正在研究logback源码。。。),我们就指定往文件里写入吧

 

 

	<appender name="logfile-dao"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">  
      		<evaluator name="myEval">  
        		<expression>message.contains("dao")</expression>  
      		</evaluator>
      		<onMatch>ACCEPT</onMatch>
      		<onMismatch>DENY</onMismatch>
    	</filter>  
		<Encoding>UTF-8</Encoding>
		<File>${log.base}%d{yyyy-MM-dd}.dao.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}.%d{yyyy-MM-dd}.log.zip</FileNamePattern>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
		</layout>
	</appender>
	<appender name="logfile-service"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">  
      		<evaluator name="myEval">  
        		<expression>message.contains("service.impl")</expression>  
      		</evaluator>
      		<onMatch>ACCEPT</onMatch>
      		<onMismatch>DENY</onMismatch>
    	</filter>  
		<Encoding>UTF-8</Encoding>
		<File>${log.base}%d{yyyy-MM-dd}.service.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}.%d{yyyy-MM-dd}.log.zip</FileNamePattern>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
		</layout>
	</appender>

 配置文件logback.xml中加入了如上代码,主要是<expression>message.contains("dao")</expression> ,<onMatch>ACCEPT</onMatch>和<onMismatch>DENY</onMismatch>,

这三部分的声明,分别是对日志内容的过滤,符合该条件即ACCEPT,不符合就DENY,ok,于是成功解决问题。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值