代码之家  ›  专栏  ›  技术社区  ›  matt b

如何将java.util.logging发送到log4j?

  •  87
  • matt b  · 技术社区  · 16 年前

    现在,我想将ehcache添加到这个应用程序中,以满足一些缓存需求。早期版本的ehcache使用了commons日志记录,这在这种情况下可以很好地工作,但截至 version 1.6-beta1 他们删除了对commons-logging的依赖,代之以java.util.logging。

    不太熟悉java.util.logging提供的内置JDK日志记录,是否有一种简单的方法可以将发送到JUL的任何日志消息记录在log4j上,这样我就可以使用我现有的配置并设置来自ehcache的任何日志记录?

    查看JUL的javadoc,我似乎可以设置一堆环境变量来更改 LogManager Logger 日志记录器

    7 回复  |  直到 16 年前
        1
  •  38
  •   overthink    16 年前

    slf4j 作为我的主要日志API。然后,我将slf4j绑定到log4j。使用其他框架(如JUL)的第三方依赖关系可以是 bridged

        2
  •  19
  •   Jim Ferrans    14 年前

    SLF4J SLF4J是由Log4J的创建者Ceki Glc编写的,他做得非常好。在我们的代码中,我们直接使用SLF4J日志API,并配置SLF4J,以便从 Jakarta Commons Logging (JCL)、java.util.logging(JUL)和 Log4J 所有API都与SLF4J API桥接。我们需要这样做,因为和您一样,我们使用选择了不同日志API的第三方(开源)库。

    在SLF4J的底部,您可以将其配置为使用特定的记录器实现。它附带了一个内部或“简单”的记录器,您可以使用Log4J、JUL或 Logback

    最初,我们使用的是Logback实现,也是由Ceki Glc编写的。这是非常强大的。然而,我们随后决定将我们的应用程序部署到Glassfish Java EE应用程序服务器上,该服务器的日志查看器需要JUL格式的消息。所以今天我从Logback切换到JUL,在短短几分钟内,我用一个SLF4J jar替换了两个Logback jar,将其连接到JUL实现。

    所以,就像@overthink一样,我衷心建议在您的设置中使用SLF4J。

        3
  •  15
  •   Emmanuel Bourg    10 年前

    有一个比SLF4J更简单的替代方案来桥接JUL和log4j,请参阅 http://people.apache.org/~psmith/logging.apache.org/sandbox/jul-log4j-bridge/examples.html

    您只需将jul-log4j-bridge放在类路径上并添加一个系统属性:

    -Djava.util.logging.manager=org.apache.logging.julbridge.JULBridgeLogManager
    

    jul-log4j-bridge不在Maven Central中,可以从这个存储库中获取:

    <repository>
      <id>psmith</id>
      <url>http://people.apache.org/~psmith/logging.apache.org/repo</url>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
    

    然后与以下物质一起使用:

    <dependency>
      <groupId>org.apache.logging</groupId>
      <artifactId>apache-jul-log4j-bridge</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>apache-log4j-component</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    

    1. http://svn.apache.org/repos/asf/logging/sandbox/jul-to-log4j-bridge/
    2. 编辑pom.xml,将对log4j:log4j:1.2.15的依赖替换为log4j:apache-log4j-extras:1.2.17,并删除对apache-log4j组件的依赖
    3. 打包
        4
  •  10
  •   Marcono1234    5 年前

    2014年10月

    由于log4j的2.1版本存在组件log4j-jul,它完全允许这样做。不过,如果您使用的是log4j 1,则必须能够升级到log4j2才能使用这种方法。

    JDK Logging Adapter

    Class LogManager

    Migrate from log4j 1.x to log4j 2

        5
  •  3
  •   araqnid    16 年前

    我认为slf4j站点有一个桥梁,可以通过slf4j传递java.util.logging事件(并因此传递给log4j)。

    是的,SLF4J下载包含jul-to-slaf4j,我认为它就是这样做的。它包含一个JUL处理程序,用于将记录传递给SLF4J。

        6
  •  2
  •   Joshua Davis    15 年前

    @义海-谢谢你发布链接到我的维基。那里的示例将JUL重定向到Log4J,我已经在生产系统中运行了几年。JBoss 5.x已经将JUL重定向到Log4J,所以我在升级时把它拿了出来。我有一个新的重定向到SLF4J的,我现在在一些事情上使用它。有机会我会发布的。

    然而,SLF4J已经具备了:

    http://mvnrepository.com/artifact/org.slf4j/jul-to-slf4j

        7
  •  0
  •   jiahut    7 年前

    您应该在启动时手动添加Blow

    SLF4JBridgeHandler.removeHandlersForRootLogger()
    SLF4JBridgeHandler.install()
    

    演示-> https://gist.github.com/jiahut/654ecc75a13b0a1d8f3b4d5d2d69dc6d