web-dev-qa-db-ja.com

Spring構成のデバッグ

SpringとHibernateを使用し、Websphereで実行するJavaアプリケーションで作業しています。SpringがオブジェクトにDaoをロードすることを期待する問題に遭遇しましたが、何らかの理由でそれは起こりません(ほぼ同じ方法で指定された別のDaoは正常にロードされます)。

問題は、Springが何をロードするかをどのように決定するかをデバッグするにはどうすればよいですか? Springのロギングをオンにできますか?

59
jprusakova

はい、Springフレームワークのロギングは非常に詳細です。すでにロギングフレームワークを使用しているかどうかについては、投稿で言及していません。 log4jを使用している場合は、log4j構成に(つまり、log4j.xmlまたはlog4j.propertiesに)スプリングアペンダーを追加するだけです。log4jxml構成を使用している場合は、次のようなことができます。

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

または

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

JUnitテストを使用してこの問題を単独でテストすることをお勧めします。これは、 Junit と組み合わせて spring testing module を使用して行うことができます。スプリングテストモジュールを使用する場合、大部分の作業が行われ、コンテキストコンフィグに基づいてコンテキストファイルがロードされ、コンテナが起動されるため、ビジネスロジックのテストに集中できます。ここに小さな例があります

@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);
    }
}

更新

ロギングのロード方法を変更することはお勧めしませんが、開発環境でこれを試してください。このスニペットをweb.xmlファイルに追加してください

<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>

log4j構成ファイルの更新


これをローカルのTomcatでテストしたところ、アプリケーションの起動時に大量のログが生成されました。私も修正したいと思います:usedebugnotinfoas @ Rayan Stewartが言及しました。

<?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>
62

Spring Bootを使用する場合、-debugフラグを指定してアプリケーションを起動することにより、「デバッグ」モードを有効にすることもできます。

Java -jar myapp.jar --debug

Application.propertiesでdebug = trueを指定することもできます。

デバッグモードを有効にすると、コアロガー(埋め込みコンテナ、Hibernate、およびSpring Boot)の選択が構成され、より多くの情報が出力されます。デバッグモードを有効にしても、アプリケーションがDEBUGレベルのすべてのメッセージをログに記録するようには設定されません。

または、-traceフラグ(またはapplication.propertiesでtrace = true)を使用してアプリケーションを起動することにより、「トレース」モードを有効にすることができます。これにより、選択したコアロガー(埋め込みコンテナー、Hibernateスキーマ生成、Springポートフォリオ全体)のトレースログが有効になります。

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

6
Anton Yuriev