【问题标题】:Can we able to create two instance of log4j我们可以创建两个 log4j 实例吗
【发布时间】:2012-04-22 11:58:49
【问题描述】:

我们能否在一个类中创建两个 log4j 实例以写入文件,另一个在 jdbcadapter 中?

// one to write log in console
Logger log = Logger.getLogger(this.getClass()); 

// write in database within one class 
Logger log1 = Logger.getLogger(this.getClass()); 

我的 jdbc 适配器是 我的文件适配器是 我想为 File 记录 Logger 实例日志,为 jdbc 记录 Logger Instant log1。

【问题讨论】:

  • 在您的示例拖车实例中是相同的。

标签: java jboss log4j


【解决方案1】:

log4j 中有各种Appenders 可用,具有描述性名称,例如FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, NTEventLogAppender and even SMTPAppender。多个 Appender 可以附加到任何 Logger,因此可以将相同的信息记录到多个输出;例如本地文件和另一台计算机上的套接字侦听器。

此外,如果想根据级别将日志写入不同的输出,那么您可以尝试Log to appender by level

【讨论】:

  • 我的问题是我想在文件系统中编写一些内部逻辑过程,并在数据库中编写我的请求和响应。我知道上面给出的适配器。在单个类中,我想在文件中写一个,在数据库中写另一个。
【解决方案2】:

这仅适用于您为第二个记录器指定不同名称的情况。否则两个变量将包含相同的实例。例如:

Logger log = Logger.getLogger(this.getClass());
Logger log1 = Logger.getLogger(this.getClass().getName() + ".db");

然后你有两个分开的记录器。

【讨论】:

  • 好的 @Nitram 你将如何为此编写适配器
【解决方案3】:

我不确定这是否会创建实例(或返回相同的缓存实例),但即使创建了,它也会具有相同的 appender 配置(因为相同的类名用于类别)。

您可以获得两个具有不同类别名称的不同记录器:

Logger log = Logger.getLogger(this.getClass()); 

Logger log1 = Logger.getLogger(this.getClass().getName()+".extra");

他们登录的位置在 log4j.properties 中配置。

此外,您可以将相同的 logger 日志记录到多个 appender,具体取决于优先级等过滤器。因此,除非您的代码中有复杂的逻辑来记录在哪里记录什么,否则您可以只使用一个记录器,它仍然可以同时进入文件和数据库。

【讨论】:

  • 如何分别为 log1 实例编写适配器,因为它不会记录名称为“log”的任何日志
猜你喜欢
  • 2014-06-29
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多