2012-07-19 109 views
0

到现在为止,我已经使用的方法与log4j的是这样的:log4j-使用特定的记录,但显示的类名

void writeMethod(String msg){ 
    StackTraceElement[] st = Thread.currentThread().getStackTrace(); 
    Logger log=Logger.getLogger(st[2]); 
    log.info(msg); 
} 

这与属性一起,让我在日志文件中显示类/方法调用写入方法,它工作正常,只要我只需要每个应用程序运行一个日志文件。现在每个应用程序有更多的线程,每个应用程序需要多于1个日志文件(数量可以是几乎无限的)。 因为我希望有超过1个日志文件,所以我会在应用程序启动时自动创建log4j.properties文件,然后为应用程序的每个线程使用特定的appender。

所以appender被命名为l0, l1, l2 ....,并且每个都写入不同的日志文件。

这意味着,我现在用的是这样的:

void writeMethod(int threadNr ,String msg){ 

     Logger log=Logger.getLogger("l"+threadNr); 
     log.info(msg); 
    } 

我的问题是:我可以用这第二种方法,也有能够写的方法/类,它被称为以前的功能记录方法?

+1

这样做的具体原因是什么? Log4j可以配置为输出类,方法和线程名称。 – TedTrippin 2012-07-19 13:52:47

+0

你能提供这样一个例子吗?因为当我告诉它输出类时,第二个版本只写l0,l1。 – CosminO 2012-07-19 13:54:12

+0

我的回答下面回答你的问题吗? – TedTrippin 2012-07-19 15:40:29

回答

1

我使用一个属性文件来配置我的log4j。布局的例子...

log4j.appender.R.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n 

而这里的一个log4j reference的链接。如果你想要每个线程的文件,你总是可以创建多个appender并为每个appen创建记录器。例如。

// In your log4j config 
log4j.logger.1=DEBUG 

// In you code 
Logger log = Logger.getLogger("1.ClassName"); 
+0

我在看到你的答案之前使用了类似的东西,这也回答了我的问题。谢谢 – CosminO 2012-07-23 08:02:48