【问题标题】:log4j- using specific logger but showing the class namelog4j - 使用特定的记录器但显示类名
【发布时间】:2012-07-19 22:28:36
【问题描述】:

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

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

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

所以附加程序被命名为l0, l1, l2 ....,每个附加程序写入不同的日志文件。

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

void writeMethod(int threadNr ,String msg){

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

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

【问题讨论】:

  • 这样做有什么特别的原因吗? Log4j可以配置输出类、方法和线程名。
  • 你能提供这样的例子吗?因为第二个版本只是写 l0, l1 当我告诉它输出类时。
  • 下面我的回答能回答你的问题吗?

标签: java log4j


【解决方案1】:

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

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

这里有一个log4j reference 的链接。如果您想要每个线程的文件,您总是可以创建多个附加程序并为每个附加程序创建记录器。例如。

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

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

【讨论】:

  • 在看到您的答案之前,我使用了类似的东西,这也回答了我的问题。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多