【问题标题】:logging configurations for spring and hibernatespring 和 hibernate 的日志记录配置
【发布时间】:2017-06-06 22:57:48
【问题描述】:

目前,我正在与

  • log4j 2.7;
  • springframework 4.3.5;
  • 休眠 5.2.3。

我通过 xml 文件配置 log4j。
为此,我创建了一些附加程序,其中一个名为“General”。 我需要的是所有日志都必须转到该附加程序(包括由 springframework 或 hibernate 生成的那些),并且后者都没有打印在控制台上(我仍然需要来自其他类的其他日志)。
我尝试编写这些记录器:

<Loggers>
    <Logger name="org" level="ALL" />
    <Root level="ALL" additivity="false">
        <AppenderRef ref="General"/>
    </Root>
    <Logger name="tests" level="ALL" additivity="false">
        <AppenderRef ref="console"/>
        <AppenderRef ref="General"/>
    </Logger>
</Loggers>

关键是,除了 springframework 之外的所有包都通过该 appender 正确记录,springframework 仍然登录控制台并且不通过“General” appender 写入任何行。我该如何解决这个问题?

编辑:我发现这可能是因为 springframework 似乎使用其他库(logback、slf4j 和类似库)进行日志记录。我还读到 springboot 可以配置为使用 log4j,由于我对 Spring 及其库仍然不太了解,我不知道如何获得我想要的结果。

【问题讨论】:

  • 我不确定 log4j XML 元素是否大写(例如logger,而不是Logger),&lt;appender-ref&gt; 中也有破折号
  • @fabienbk,从这个角度来看,一切似乎都正常工作,正如您在此处看到的 (logging.apache.org/log4j/2.x/manual/appenders.html)。关键是只有一个库似乎看不到我的配置,而另一个库可以。
  • 哦,我的错!确实是 log4j 2。您在控制台中从 spring 中观察到了什么日志语句?
  • @fabienbk,目前我看到所有 springframework 日志,例如“10:32:07.326 [main] DEBUG oscore.env.StandardEnvironment - 添加 [systemProperties] PropertySource 以最低搜索优先级” .而且,它们太多了,几乎让我看不到我制作的那些。我根本不想删除它们的原因是,将它们移动到一个文件中,我仍然可以使用它们进行调试,但前提是我想这样做。

标签: java spring hibernate logging log4j2


【解决方案1】:

最后,我只是在 pom 上添加了这些依赖项。

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>2.7</version>
    </dependency>

并删除记录器

<Logger name="org" level="ALL" />

【讨论】:

    【解决方案2】:

    当您定义 org 记录器时,您需要在该记录器中传递 appender ref 希望这会奏效。

    <Logger name="org" level="ALL" >
     <AppenderRef ref="General"/>
    </Logger>
    

    Spring 默认的 Commons Logging 库。您需要禁用它,而是使用 lg4j 库。 您需要排除 commons-logging 依赖项。

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.0.RELEASE</version>
            <scope>runtime</scope>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    

    您需要将 Log4j 放在类路径中,并在类路径的根目录中为其提供配置文件,即 log4j.xml。 并在您的 pom.xml 中添加以下依赖项。

    <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
            <scope>runtime</scope>
        </dependency>
    

    参考 - http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#overview-not-using-commons-logging

    【讨论】:

    • 不幸的是,它没有解决任何问题。我在我的问题中添加了更多细节。恐怕如果“org.springframework.*”通过该配置进行日志记录,根记录器将自行捕获,而无需其他记录器。
    • Spring 默认为 Commons Logging 库。您需要禁用它,而是使用 lg4j 库。
    • 我该怎么做?
    • 但这让我使用 log4j 1.2 而不是 log4j 2.7,不是吗?
    • 您可以指定要使用的版本。以1.2.14版本为例
    猜你喜欢
    • 2011-10-18
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多