log4j-使用特定记录器但显示类名

时间:2012-07-19 13:30:16

标签: java log4j

到目前为止,我已经使用了log4j这样的方法:

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

这与属性一起,允许我在日志文件中显示调用write方法的类/方法,并且只要每个应用程序运行只需要一个日志文件,它就能正常工作。现在我每个应用程序有更多的线程,每个应用程序需要超过1个日志文件(数量可以,实际上,无限制)。 由于我希望有多个日志文件,因此我会在应用程序启动时自动创建log4j.properties文件,然后为应用程序的每个线程使用特定的appender。

因此,appender的命名方式与l0, l1, l2 ....相同,并且每个appender都会写入不同的日志文件。

这意味着我现在正在使用类似的东西:

void writeMethod(int threadNr ,String msg){

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

我的问题是:我可以使用第二种方法并且还具有能够编写调用日志记录方法的方法/类的先前功能吗?

1 个答案:

答案 0 :(得分:1)

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

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

这是log4j reference的链接。如果您想要每个线程的文件,您可以始终创建多个appender并为每个线程创建记录器。例如

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

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