Hibernate 如何在Tomcat+中使用SLF4J/logback登录;冬眠

Hibernate 如何在Tomcat+中使用SLF4J/logback登录;冬眠,hibernate,tomcat,logging,Hibernate,Tomcat,Logging,因此,我正在部署一个使用Hibernate4.3.6的web应用程序。还有Tomcat 7。 我试图使用SLF4J作为日志抽象层来记录。然而,我有很多问题和疑问。 首先,Hibernate和Tomcat都有不同的日志框架,分别是jboss日志和juli(即使我在库中找不到juli) 所以,我想我必须安装从这些框架到SLF4J的桥接器。 对于Hibernate,根据答案,解决方案可以是使用SystemProperty。但是,如果我不设置这个 它先尝试jboss,然后尝试log4j,然后尝试slf4

因此,我正在部署一个使用Hibernate4.3.6的web应用程序。还有Tomcat 7。 我试图使用SLF4J作为日志抽象层来记录。然而,我有很多问题和疑问。 首先,Hibernate和Tomcat都有不同的日志框架,分别是jboss日志和juli(即使我在库中找不到juli) 所以,我想我必须安装从这些框架到SLF4J的桥接器。 对于Hibernate,根据答案,解决方案可以是使用SystemProperty。但是,如果我不设置这个

它先尝试jboss,然后尝试log4j,然后尝试slf4j(仅当使用了logback时),然后再回退到jdk。 所以,也许这就是我想要的:不要设置SystemProperty,让它选择slf4j

对于Tomcat,我认为我必须简单地将jul-to-slf4j和Tomcat-juli-jar添加到构建路径中。 所以,现在,我在构建路径上有一个JAR:

  • slf4j-api-1.7.7
  • logback-classic-1.1.2
  • logback-core-1.1.2
  • tomcat-juli-7.0.42
  • 7月至slf4j-1.7.7
(我删除了jboss日志以及hibernate附带的默认和旧slf4j,但没有删除tomcat日志) 此外,我还将此xml文件添加到项目中的一个包中

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug = "true">

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>/var/lib/tomcat7/MyApp/MyLog.log</file>
        <encoder>
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </encoder>
    </appender>

    <root level="trace">
    <appender-ref ref="FILE" />
    </root>
</configuration>
然而,一切都不起作用。我继续收到来自Tomcat logger的消息,而Hibernate抱怨它没有日志;同时,我看不到任何来自slf4j/logback的日志

SEVERE: Exception sending context initialized event to listener instance of class pervasive.com.gmail.tigerjack89.forum.server.controller.servlet.ContainerContext
java.lang.NoClassDefFoundError: org/jboss/logging/BasicLogger
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2944)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1208)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:192)
    ...
Caused by: java.lang.ClassNotFoundException: org.jboss.logging.BasicLogger
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)

在控制台上?

jboss日志记录是hibernate核心的可传递依赖项,因此jboss日志记录jar应该位于构建路径中。检查项目>部署程序集,并确保存在maven依赖项,它应该如下所示


也可以尝试Tomcat>清洁

我知道日志记录有两个问题—Hibernate日志记录和tomcat日志记录

  • 对于hibernate,您必须在类路径中包含jboss日志jar,因为jboss日志只是一个日志外观。要配置日志管理器,例如使用/添加处理程序,您需要一个日志管理器,如JBoss log manager、J.U.L.log manager、logback或log4j。 仅包含此库就可以解决您的问题

  • 对于tomcat日志记录,您可能必须在$CATALINA_HOME/conf/logging.properties中指定slf4j配置

    handlers=org.slf4j.bridge.SLF4JBridgeHandler


  • 我假设您已将xml文件命名为logback.xml,并将其放置在类路径中。

    到@stackdev。好的,所以我将jboss日志添加回类路径,错误消失了。问题是,现在我有很多来自logback、jboss日志和juli的消息。此外,我还稍微修改了logback.xml文件,试图隔离来自logback的消息,但没有创建任何文件。相反,它会继续写入控制台。此外,我还修改了logging.properties文件,但我认为现在没有使用它:我正在使用Eclipse内部工作区元数据部署服务器。关于您的大量消息问题,您能否将日志快照和最新的logback.xml发布到,以便正确理解问题。抱歉,我没有编写,但是我在编辑中添加了所有的信息,而我直接修改了logback.xml。我不知道你是否阅读了其他答案下的评论。顺便说一句,谢谢你的时间。我认为问题之一是logback.xml文件位于WEB-INF/classes的子文件夹中。然而,我仍然有其他问题:事实上,Hibernate继续将其消息记录到stdout(结果是在catalina.out上)。
    SEVERE: Exception sending context initialized event to listener instance of class pervasive.com.gmail.tigerjack89.forum.server.controller.servlet.ContainerContext
    java.lang.NoClassDefFoundError: org/jboss/logging/BasicLogger
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2944)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1208)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
        at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:192)
        ...
    Caused by: java.lang.ClassNotFoundException: org.jboss.logging.BasicLogger
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
    
    16:50:01.331 [localhost-startStop-1] DEBUG org.hibernate.SQL - 
        select
            subforums0_.parent_sub_forum as parent_s3_1_0_,
            subforums0_.id as id1_1_0_,
            subforums0_.id as id1_1_1_,
            subforums0_.parent_sub_forum as parent_s3_1_1_,
            subforums0_.title as title2_1_1_ 
        from
            subforum subforums0_ 
        where
            subforums0_.parent_sub_forum=?
    Hibernate: 
        select
            subforums0_.parent_sub_forum as parent_s3_1_0_,
            subforums0_.id as id1_1_0_,
            subforums0_.id as id1_1_1_,
            subforums0_.parent_sub_forum as parent_s3_1_1_,
            subforums0_.title as title2_1_1_ 
        from
            subforum subforums0_ 
        where
            subforums0_.parent_sub_forum=?
    16:50:01.332 [localhost-startStop-1] DEBUG o.h.l.p.e.p.i.ResultSetProcessorImpl - Preparing collection intializer : [pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforums#11]
    16:50:01.337 [localhost-startStop-1] DEBUG o.h.e.l.i.CollectionLoadContext - 1 collections were found in result set for role: pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforums
    16:50:01.337 [localhost-startStop-1] DEBUG o.h.e.l.i.CollectionLoadContext - Collection fully initialized: [pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforums#11]
    16:50:01.337 [localhost-startStop-1] DEBUG o.h.e.l.i.CollectionLoadContext - 1 collections initialized for role: pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforums
    16:50:01.338 [localhost-startStop-1] DEBUG o.h.l.c.p.AbstractLoadPlanBasedCollectionInitializer - Done loading collection
    16:50:01.338 [localhost-startStop-1] DEBUG o.h.e.t.spi.AbstractTransactionImpl - committing
    16:50:01.339 [localhost-startStop-1] DEBUG o.h.e.i.AbstractFlushingEventListener - Processing flush-time cascades
    16:50:01.346 [localhost-startStop-1] DEBUG o.h.e.i.AbstractFlushingEventListener - Dirty checking collections
    16:50:01.361 [localhost-startStop-1] DEBUG o.h.engine.internal.Collections - Collection found: [pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforumThreads#11], was: [pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforumThreads#11] (uninitialized)
    16:50:01.361 [localhost-startStop-1] DEBUG o.h.engine.internal.Collections - Collection found: [pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforums#11], was: [pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum.subforums#11] (initialized)
    16:50:01.362 [localhost-startStop-1] DEBUG o.h.e.i.AbstractFlushingEventListener - Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
    16:50:01.362 [localhost-startStop-1] DEBUG o.h.e.i.AbstractFlushingEventListener - Flushed: 0 (re)creations, 0 updates, 0 removals to 2 collections
    16:50:01.364 [localhost-startStop-1] DEBUG o.h.internal.util.EntityPrinter - Listing entities:
    16:50:01.366 [localhost-startStop-1] DEBUG o.h.internal.util.EntityPrinter - pervasive.com.gmail.tigerjack89.forum.shared.model.entities.Subforum{subforumThreads=<uninitialized>, subforums=[], subforumParent=null, subforumId=11, subforumTitle=Main}
    16:50:01.367 [localhost-startStop-1] DEBUG o.h.e.t.i.jdbc.JdbcTransaction - committed JDBC Connection
    16:50:01.373 [localhost-startStop-1] DEBUG o.h.e.j.i.LogicalConnectionImpl - Releasing JDBC connection
    16:50:01.373 [localhost-startStop-1] DEBUG o.h.e.j.i.LogicalConnectionImpl - Released JDBC connection
    Dec 06, 2014 4:50:01 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8080"]
    Dec 06, 2014 4:50:01 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 5850 ms
    
    Dec 07, 2014 7:46:59 AM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8080"]