2010-10-04 57 views
0

我有这样的appender。Java logback FileAppender文件模式

<appender name="Action.FileAppender" class="ch.qos.logback.core.FileAppender"> 
<file>logs\\${date}\\${thread}.log</file> 
<encoder> 
<pattern>%level - %msg%n</pattern> 
</encoder> 
</appender> 

我想$ {date}和$ {thread}是当前日期和当前线程名称。我怎么能做到这一点?

回答

0

你的意思是你想在运行期间动态设置输出文件名吗? AFAIK它不可能直接通过配置。你有两种解决方法:

  • 设置输出文件名从动态代码或
  • 使用Mapped Diagnostic Context,用相同的日志文件中的特定线程的数据前面加上您的日志信息。

第一种方法相当繁琐和浪费,因为您需要特定于实例的记录器和appender,以便可以从不同线程调用不同实例的类。即使如此,如果同一个对象在多个线程之间共享呢?

第二个更自然简单。而且,利用例如一些后处理一个简单的shell脚本,甚至可以将属于不同线程的日志过滤到不同的日志文件中。

+0

谢谢!你能以第一种方式来帮助我吗? – sfireman 2010-10-04 12:05:37

+0

@sfireman,对不起,我不能。在这方面它显然与Log4J不同。 [手册](http://logback.qos.ch/manual/configuration.html)提到它是可能的,但没有提供任何示例。 – 2010-10-04 12:37:49

2

SiftingAppender可能是你需要的。它被设计成根据“鉴别器”来分离日志事件,在你的情况下这将是日期和线程名称。

+0

可能这是一种方法,但这种方式使用MDC。在多线程应用程序中如何工作MDC? – sfireman 2010-10-04 13:26:48

+0

Logback中的映射诊断上下文(MDC)使用ThreadLocal来维护线程之间的分离,所以它在多线程应用程序中工作得非常好。 – 2012-01-31 13:43:04