我们能否在第一类中创建两个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。
答案 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,具体取决于优先级等过滤器。因此,除非您的代码中有关于记录内容的复杂逻辑,否则您只需使用一个记录器,它仍然可以同时访问文件和数据库。