我在我的应用程序中使用 slf4j,它在 jboss 容器中运行。底层框架是 log4j。
我们看到的问题是日志模式中的方法名称 (%M) 和行号 (%L) 标记没有被正确解释。
我看到的不是我的方法名称,而是“调试”或“信息”——换句话说,是 log4j 或 slf4j 类中的方法。同样,行号与代码中的行号不对应——例如,所有调试条目的行号都是 104。
以下是示例附加程序的配置方式:
<appender name="catalog-log" class="org.apache.log4j.FileAppender">
<param name="File" value="logs/catalog.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss}|%c:%L|%M|%1.1p|%m %n" />
</layout>
</appender>
和一些示例输出:
17.07.2013 09:43:07|com.ecommerce.CatalogAPIUnmarshallerXML:104|debug|G|Enter populateTariff
17.07.2013 09:43:07|com.ecommerce.CatalogAPIUnmarshallerXML:104|debug|G|adding new tariff = D
17.07.2013 09:43:07|com.ecommerce.CatalogAPIUnmarshallerXML:104|debug|G|Found Tariff: D
17.07.2013 09:43:07|com.ecommerce.CatalogAPIUnmarshallerXML:104|debug|G|Exit populateTariff
这是它的外观:
17.07.2013 09:43:07|com.ecommerce.CatalogAPIUnmarshallerXML:3250|populateTariff|G|adding new tariff = D
17.07.2013 09:43:07|com.ecommerce.CatalogAPIUnmarshallerXML:3261|populateTariff|G|Found Tariff: D
17.07.2013 09:43:07|com.ecommerce.CatalogAPIUnmarshallerXML:3287|populateTariff|G|Exit populateTariff
在我们从 log4j 迁移到 slf4j 之前,它工作得很好。
一些类还没有迁移到 slf4j,它们也在工作——行号和方法名显示得很好。所以怀疑的手指指向了slf4j。或者更有可能,我的配置。
我们正在使用 slf4j 1.5.8 和 log4j 1.2.16