Java 可以为不同的方法使用不同的log4j附加器吗?

Java 可以为不同的方法使用不同的log4j附加器吗?,java,log4j,Java,Log4j,我有一个log4j配置文件,它使用具有特定布局的ConsolePender 我用 logger.info(“一些文本”); 在我的java代码中的几个地方 是否可以在配置文件中创建另一个具有不同布局的appender,并在代码中选择的任何位置使用特定的appender 是否可以在配置文件中创建另一个具有不同布局的appender,并在代码中选择的任何位置使用特定的appender 是的,您可以使用不同的布局创建不同的附加器,并为每个附加器创建不同的类别 使用类别名称来获取记录器,而不是appen

我有一个log4j配置文件,它使用具有特定布局的ConsolePender

我用 logger.info(“一些文本”); 在我的java代码中的几个地方

是否可以在配置文件中创建另一个具有不同布局的appender,并在代码中选择的任何位置使用特定的appender

是否可以在配置文件中创建另一个具有不同布局的appender,并在代码中选择的任何位置使用特定的appender

是的,您可以使用不同的布局创建不同的附加器,并为每个附加器创建不同的类别

使用类别名称来获取记录器,而不是appender名称。


示例:(
log4j.xml

输出:

[main] WARN  category1 - warn msg for stdout1 appender
2014-05-09 02:46:29,216 [main] INFO  category2 - info msg for stdout2 appender

您在log4j配置中使用的是什么<代码>XML或
属性
?我正在使用XML。已经有了。好的,我必须更新我的帖子。好的,我已经更新了我的帖子。希望它能工作。你真的能通过它的appender名称(即
logger.getLogger(“stdout1”)
)检索记录器吗?不要总是相信输出。尝试以下操作:
Logger.getLogger(“stdout3”)
。它也可以工作,即使没有定义stdout3追加器。我的猜测是,您的示例之所以有效,是因为它涉及到根记录器。log4j将获得请求的
stdout1
(或
stdout3
)记录器,如果找不到它,则返回到根记录器。它适用于您的简单示例,但尝试在不同的记录器上定义这些appender,将它们从根记录器中删除(保留一个默认appender,但它可以清楚地标识根记录器),您将看到它中断。我已经测试并确认了这一点。我添加了额外的附加程序,并从新的附加程序中删除了%d。getLogger似乎打印出了logger的名称,但我仍然打印出了日期。谢谢@Braj,这会更好,因为它应该工作,但是使用logger而不是类别会更好。由于某个类别在技术上与记录器相同,并且已弃用(该类别本应在2003年年中删除,以说明其弃用程度:),请参阅此链接:@jlr我认为在配置文件中使用记录器没有问题。JavaDoc将
Category.getInstance()
称为不推荐使用的表单。如果您发现有关配置的任何参考资料,请与他人分享。再次非常感谢。
org.apache.log4j.Logger.getLogger("category1").warn("debug msg for stdout1 appender");
org.apache.log4j.Logger.getLogger("category2").info("info msg for stdout2 appender");
[main] WARN  category1 - warn msg for stdout1 appender
2014-05-09 02:46:29,216 [main] INFO  category2 - info msg for stdout2 appender