it-swarm-id.com

Konfigurasi Spring debugging

Saya sedang mengerjakan aplikasi Java yang menggunakan Spring dan Hibernate dan berjalan di Websphere. Saya mengalami masalah, di mana saya berharap Spring memuat Dao ke objek saya, tetapi untuk beberapa alasan itu tidak terjadi. (Dao lain yang ditentukan dengan cara yang sama dimuat dengan baik.)

Pertanyaannya adalah - bagaimana saya bisa men-debug bagaimana Spring memutuskan apa yang akan dimuat? Bisakah saya mengaktifkan logging untuk Spring, dan di mana?

59
jprusakova

Ya, Spring framework logging sangat detail, Anda tidak menyebutkan di postingan Anda, apakah Anda sudah menggunakan framework logging atau tidak. Jika Anda menggunakan log4j maka tambahkan saja spring appenders ke log4j config (i.e ke log4j.xml atau log4j.properties), Jika Anda menggunakan log4j xml config, Anda dapat melakukan beberapa hal seperti ini

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

atau

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

Saya akan menyarankan Anda untuk menguji masalah ini secara terpisah menggunakan uji JUnit, Anda dapat melakukan ini dengan menggunakan modul pengujian pegas bersamaan dengan Junit . Jika Anda menggunakan modul uji pegas, ia akan melakukan sebagian besar pekerjaan untuk Anda, ia memuat file konteks berdasarkan konfigurasi konteks Anda dan memulai wadah sehingga Anda bisa fokus pada pengujian logika bisnis Anda. Saya punya contoh kecil di sini

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

MEMPERBARUI

Saya tidak menyarankan Anda untuk mengubah cara Anda memuat logging tetapi coba ini di lingkungan dev Anda, Tambahkan potongan ini ke file web.xml Anda

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

PEMBARUAN file konfigurasi log4j


Saya menguji ini pada Tomcat lokal saya dan menghasilkan banyak logging pada aplikasi start up. Saya juga ingin membuat koreksi: gunakan debug bukan info sebagai @ Rayan Stewart menyebutkan.

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

Jika Anda menggunakan Spring Boot, Anda juga dapat mengaktifkan mode "debug" dengan memulai aplikasi Anda dengan flag --debug.

Java -jar myapp.jar --debug

Anda juga dapat menentukan debug = true di application.properties Anda.

Ketika mode debug diaktifkan, pilihan logger inti (wadah tertanam, Hibernate, dan Spring Boot) dikonfigurasi untuk menampilkan informasi lebih lanjut. Mengaktifkan mode debug tidak mengkonfigurasi aplikasi Anda untuk mencatat semua pesan dengan level DEBUG.

Atau, Anda dapat mengaktifkan mode "jejak" dengan memulai aplikasi Anda dengan tanda --trace (atau trace = true di application.properties). Melakukannya memungkinkan penelusuran jejak untuk pemilihan penebang inti (wadah tertanam, pembuatan skema Hibernate, dan seluruh portofolio Musim Semi).

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

6
Anton Yuriev