3

我们能否在一个类中创建两个 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 适配器是我的文件适配器是我想为文件记录器实例日志和用于 jdbc 的记录器即时日志 1。

4

3 回答 3

3

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

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

于 2012-04-10T07:24:49.847 回答
1

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

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

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

于 2012-04-10T07:21:50.453 回答
1

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

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

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

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

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

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

于 2012-04-10T07:24:22.063 回答