我在Spring MVC webapp中使用Hibernate 4.3.7.Final和Log4j2,通过Tomcat 7发布。所有配置都是通过JavaConfig完成的(即没有web.xml或其他XML配置文件)。
默认情况下,Hibernate日志记录不会通过Log4j,原因如Apache wiki中所述。为了解决这个问题,我需要创建一个系统设置如下:
System.setProperty("org.jboss.logging.provider", "slf4j");
由于我的应用程序是webapp,因此没有主线程,因此我不确定将System.setProperty
调用放在何处。任何建议将不胜感激。
答案 0 :(得分:2)
您可以在上下文侦听器中定义此系统属性,这是第一个入口点,如下所示:
@WebListener
public class ContextListenerExample implements ServletContextListener {
public void contextInitialized(ServletContextEvent e){
System.setProperty("org.jboss.logging.provider", "slf4j");
}
}
您甚至可以使用spring定义系统属性,如下所示:
<bean id="setupJBossLoggingProperty"
class="org.springframework.batch.support.SystemPropertyInitializer"
p:keyName="org.jboss.logging.provider" p:defaultValue="slf4j"/>
然后你可以这样说:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
depends-on="setupJBossLoggingProperty">
...
所以这意味着将首先设置系统属性,然后初始化hibernate bean。
答案 1 :(得分:1)
如果你使用一些WebApplicationInitializer
实现来引导你的Spring应用程序(我假设你是因为你没有web.xml)你可以把它放在onStartup()
这样的方法中:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.setProperty("org.jboss.logging.provider", "slf4j");
}