我们能否创建两个log4j实例

时间:2012-04-10 07:16:10

标签: java jboss log4j

我们能否在第一类中创建两个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适配器是                                                                           我的文件适配器是                                                                              我想在Logger实例日志中找到文件anmd Logger即时log1 for jdbc。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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

然后你有两个独立的记录器。

答案 2 :(得分:1)

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

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

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

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

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

此外,您可以将相同的记录器日志记录到多个appender,具体取决于优先级等过滤器。因此,除非您的代码中有关于记录内容的复杂逻辑,否则您只需使用一个记录器,它仍然可以同时访问文件和数据库。