根据Spring Framework文档,日志记录是Spring唯一的强制依赖。它默认使用Apache Commons Logging,或者可以配置为使用SLF4J或Log4J。我的问题是我使用Spring编写的应用程序,而不是使用不同的记录器类并在我的应用程序中实例化一个新的记录器对象,是否有可能获得对Spring自己使用的记录器的引用?
答案 0 :(得分:4)
当然 - 记录器只能通过名称引用。因此,如果Spring使用“org.springframework.beans.abc”(例如)作为记录器名称,您还可以要求使用相同名称的记录器。 (Spring不使用一个记录器/名称进行记录 - 它使用几个,具体取决于您在Spring中使用的内容 - 应该如此。)
但是,我强烈建议不要这样做。实例化新记录器对象的成本应该是最小的 - 并且这样做的任何节省都会被额外的混淆所抵消。 Spring记录到Spring记录器名称。您的代码应记录到代码所特有的记录器名称。否则,如果记录了某些内容,您如何知道它是来自Spring代码还是代码?这将完全破坏记录器/类别名称的目的。
答案 1 :(得分:2)
需要澄清一些事情。 Apache Commons Logging是一个日志记录,而不是记录器本身。 Spring库使用此Facade来避免耦合到任何特定的日志记录实现。
可以通过提供SLF4J为Apache Commons Logging提供的桥接实现,将Spring(或使用Apache Commons Logging的任何其他内容)配置为使用SLF4J。 SLF4J也是一个日志记录,但是对Apache Commons Logging有了改进,我个人建议用它来登录你的代码。使用SLF4J进行日志记录还可以避免耦合到任何特定的日志记录实现。
您可以在他们的网站http://www.slf4j.org上找到有关SLF4J的更多信息。 SLF4J Manual的第一页演示了如何创建记录器并使用它。当您的代码使用SLF4J记录器时,它会将运行时的日志记录委托给一个真正的记录器,如Log4J,java.util.logging或Logback,具体取决于您在类路径上提供的slf4j绑定。
通常,对于日志记录,通常的做法是为每个记录的不同类都有一个记录器(通过使用它来命名每个记录器的类的完全限定类名)。我在上面链接的SLF4J手册中演示了这个原理。