Debugging Spring configuration

前端 未结 2 622
余生分开走
余生分开走 2020-12-04 08:27

I am working on a Java application that uses Spring and Hibernate and runs on a Websphere. I have run into a problem, where I expect Spring to load a Dao into my object, bu

相关标签:
2条回答
  • 2020-12-04 09:11

    Yes, Spring framework logging is very detailed, You did not mention in your post, if you are already using a logging framework or not. If you are using log4j then just add spring appenders to the log4j config (i.e to log4j.xml or log4j.properties), If you are using log4j xml config you can do some thing like this

    <category name="org.springframework.beans">
        <priority value="debug" />
    </category>
    

    or

    <category name="org.springframework">
        <priority value="debug" />
    </category>
    

    I would advise you to test this problem in isolation using JUnit test, You can do this by using spring testing module in conjunction with Junit. If you use spring test module it will do the bulk of the work for you it loads context file based on your context config and starts container so you can just focus on testing your business logic. I have a small example here

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:springContext.xml"})
    @Transactional
    public class SpringDAOTest 
    {
        @Autowired
        private SpringDAO dao;
    
        @Autowired
        private ApplicationContext appContext;
    
        @Test
        public void checkConfig()
        {
            AnySpringBean bean =  appContext.getBean(AnySpringBean.class);
            Assert.assertNotNull(bean);
        }
    }
    

    UPDATE

    I am not advising you to change the way you load logging but try this in your dev environment, Add this snippet to your web.xml file

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    

    UPDATE log4j config file


    I tested this on my local tomcat and it generated a lot of logging on application start up. I also want to make a correction: use debug not info as @Rayan Stewart mentioned.

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <param name="Threshold" value="debug" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern"
                    value="%d{HH:mm:ss} %p [%t]:%c{3}.%M()%L - %m%n" />
            </layout>
        </appender>
    
        <appender name="springAppender" class="org.apache.log4j.RollingFileAppender"> 
            <param name="file" value="C:/tomcatLogs/webApp/spring-details.log" /> 
            <param name="append" value="true" /> 
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern"
                    value="%d{MM/dd/yyyy HH:mm:ss}  [%t]:%c{5}.%M()%L %m%n" />
            </layout>
        </appender>
    
        <category name="org.springframework">
            <priority value="debug" />
        </category>
    
        <category name="org.springframework.beans">
            <priority value="debug" />
        </category>
    
        <category name="org.springframework.security">
            <priority value="debug" />
        </category>
    
        <category
            name="org.springframework.beans.CachedIntrospectionResults">
            <priority value="debug" />
        </category>
    
        <category name="org.springframework.jdbc.core">
            <priority value="debug" />
        </category>
    
        <category name="org.springframework.transaction.support.TransactionSynchronizationManager">
            <priority value="debug" />
        </category>
    
        <root>
            <priority value="debug" />
            <appender-ref ref="springAppender" />
            <!-- <appender-ref ref="STDOUT"/>  -->
        </root>
    </log4j:configuration>
    
    0 讨论(0)
  • 2020-12-04 09:13

    If you use Spring Boot, you can also enable a “debug” mode by starting your application with a --debug flag.

    java -jar myapp.jar --debug
    

    You can also specify debug=true in your application.properties.

    When the debug mode is enabled, a selection of core loggers (embedded container, Hibernate, and Spring Boot) are configured to output more information. Enabling the debug mode does not configure your application to log all messages with DEBUG level.

    Alternatively, you can enable a “trace” mode by starting your application with a --trace flag (or trace=true in your application.properties). Doing so enables trace logging for a selection of core loggers (embedded container, Hibernate schema generation, and the whole Spring portfolio).

    https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

    0 讨论(0)
提交回复
热议问题