Log4j XML yapılandırma dosyasını kullanarak Hazırda bekletme günlüğünü yapılandırma?


89

Hazırda Bekletme'nin günlüğünü Log4j için XML tarzı yapılandırma dosyasını kullanarak nasıl yapılandıracağıma dair herhangi bir belge bulamadım.

Bu mümkün mü yoksa Hazırda Bekletme'nin günlüğünü kontrol etmek için bir özellikler stili yapılandırma dosyası kullanmam gerekiyor mu?

Herhangi birinin herhangi bir bilgisi veya dokümantasyona bağlantısı varsa, takdir edilecektir.

DÜZENLEME:
Sadece açıklığa kavuşturmak için, Hazırda Bekletmeyi kontrol etmek için gerçek XML sözdiziminin bir örneğini arıyorum.

DÜZENLEME2:
İşte XML yapılandırma dosyamda bulunanlar .

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="info"/>
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="Program-Name.log"/>
        <param name="MaxFileSize" value="1000KB"/>
    <!-- Keep one backup file -->
        <param name="MaxBackupIndex" value="4"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/>
        </layout>
    </appender>

    <root>
        <priority value ="debug" />
        <appender-ref ref="console" />
        <appender-ref ref="rolling-file" />
    </root>
</log4j:configuration>

Günlüğe kaydetme iyi çalışıyor, ancak şu anda günlüklerimi doldurduğundan, hazırda bekletme günlüğünü uygulama düzeyindeki günlük kaydımdan ayrı bir şekilde durdurmanın ve denetlemenin bir yolunu arıyorum. Bunu yapmak için tercih dosyasını kullanma örnekleri buldum, bunu bir XML dosyasında nasıl yapabileceğimi merak ediyordum.


nemo, ypu bunu xml yöntemiyle nasıl yapacağını hiç öğrendi mi? Yaptıysan belki sorunun cevabını gönderebilirsin.
homaxto

homaxto, yaptım. Bir fırsat bulduğumda bunu sizin için yayınlayacağım.
James McMahon

<appender-ref ref = "console" />, hazırda bekleme günlüğünün de catalina.out'a gitmesini sağlar, catalina.out'u hazırda bekletme günlükleriyle dolu görmek istemiyorsanız, bu etiketi yorumlamalısınız
Enrique San Martín

Yanıtlar:


162

Gönderen http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging

Logger kategorilerinin listesi aşağıdadır:

Category                    Function

org.hibernate.SQL           Log all SQL DML statements as they are executed
org.hibernate.type          Log all JDBC parameters
org.hibernate.tool.hbm2ddl  Log all SQL DDL statements as they are executed
org.hibernate.pretty        Log the state of all entities (max 20 entities) associated with the session at flush time
org.hibernate.cache         Log all second-level cache activity
org.hibernate.transaction   Log transaction related activity
org.hibernate.jdbc          Log all JDBC resource acquisition
org.hibernate.hql.ast.AST   Log HQL and SQL ASTs during query parsing
org.hibernate.secure        Log all JAAS authorization requests
org.hibernate               Log everything (a lot of information, but very useful for troubleshooting) 

Log4j XML yapılandırma dosyasına yapıştırmak için biçimlendirilmiştir:

<!-- Log all SQL DML statements as they are executed -->
<Logger name="org.hibernate.SQL" level="debug" />
<!-- Log all JDBC parameters -->
<Logger name="org.hibernate.type" level="debug" />
<!-- Log all SQL DDL statements as they are executed -->
<Logger name="org.hibernate.tool.hbm2ddl" level="debug" />
<!-- Log the state of all entities (max 20 entities) associated with the session at flush time -->
<Logger name="org.hibernate.pretty" level="debug" />
<!-- Log all second-level cache activity -->
<Logger name="org.hibernate.cache" level="debug" />
<!-- Log transaction related activity -->
<Logger name="org.hibernate.transaction" level="debug" />
<!-- Log all JDBC resource acquisition -->
<Logger name="org.hibernate.jdbc" level="debug" />
<!-- Log HQL and SQL ASTs during query parsing -->
<Logger name="org.hibernate.hql.ast.AST" level="debug" />
<!-- Log all JAAS authorization requests -->
<Logger name="org.hibernate.secure" level="debug" />
<!-- Log everything (a lot of information, but very useful for troubleshooting) -->
<Logger name="org.hibernate" level="debug" />

Not: Kaydedicilerin çoğu DEBUG düzeyini kullanır, ancak org.hibernate.type TRACE kullanır. Hibernate org.hibernate.type'ın önceki sürümlerinde DEBUG kullanılıyordu, ancak Hibernate 3'ten itibaren JDBC parametre bağlama günlüğünü görmek için seviyeyi TRACE (veya TÜMÜ) olarak ayarlamanız gerekir.

Ve bir kategori şu şekilde belirtilir:

<logger name="org.hibernate">
    <level value="ALL" />
    <appender-ref ref="FILE"/>
</logger>

Kök öğeden önce yerleştirilmelidir.


<appender-ref> orada ne yaptığından emin değilim, yapılandırmamda bir ekleyici olarak değiştirdiğimde, hazırda bekletme hala hem konsola hem de dosya ekleyicime günlüğe bakıyor gibi görünüyor. Garip.
James McMahon

Bu gariptir, org.hibernate.type için Hibernate 3.2.6'da DEBUG seviyesini kullanabilirsiniz ve tüm parametreleri günlüğe kaydeder. Hazırda bekletme modunda 3.5.6 DEBUG yeterli değil, TRACE koymalısınız, ki bu IMHO tamamdır (bir kez bildiğiniz zaman) çünkü gerçekten çok fazla günlüğe kaydeder!
Riccardo Cossu

Sınıf adı Hibernate 4.2'de yeniden düzenlendi, bu nedenle işlemlerin günlüğe kaydedilmesi için kullanmanız gerekir org.hibernate.engine.transaction. Görmek: docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…
gerrytan

Ayrıca logger'ları standalone.xml'e şu şekilde ekleyebilirsiniz: <logger categoriy = "org.hibernate"> <level name = "DEBUG" /> </logger>
cw24

1
Meli L, örneğin, <Logger name="org.hibernate.SQL" level="debug" />aslında büyük harfle? L: büyük harfini büyük harfle yazarken Tomcat'te başlangıçta bir hata alıyorum "The content of element type 'log4j:configuration' must match '(renderer*,throwableRenderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)'.". Bunun log4j.xml dosyama nasıl girilmesi gerektiği konusunda da kafam karıştı. <logger>Her kategori için <level>etiketlerle birlikte ayrı bir bloğum olmalı mı yoksa sunduğunuz tek satırlıklardan kurtulabilir miyim?
MegaMatt

25

Loki 'nin cevabı hazırda 3 dokümanlara puan ve iyi bilgi sağlar, ama yine de beklediğim sonuçları elde değildi.

Çok fazla ezilme, el sallama ve genel ölü fare koşusu sonunda bana peynirimi indirdi.

Hazırda 3 kullandığından Basit Günlüğü Cephe Java için (docs başına) (SLF4J), eğer sen Log4j 1.2 güveniyorlar olacak da ihtiyaç SLF4J-log4j12-1.5.10.jar sen isteyen vardır tamamen sahip hazırda günlüğünü yapılandırma log4j yapılandırma dosyası. Umarım bu bir sonraki adama yardımcı olur.


Evet, cepheyi alttaki kayıt katmanına bağlamak için slf4j-log4j12-1.5.10.jar dosyasına ihtiyacınız var. Günlük katmanı olarak log4j kullanıyorsanız, yapılandırma dosyası hala bir log4j yapılandırmasıdır.
James McMahon

7

Homaxto'nun yorumuna yanıt olarak, şu anda sahip olduğum şey bu.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="debug"/>
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="Program-Name.log"/>
        <param name="MaxFileSize" value="500KB"/>
        <param name="MaxBackupIndex" value="4"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/>
        </layout>
    </appender>

    <logger name="org.hibernate">
        <level value="info" />
    </logger>

    <root>
        <priority value ="debug" />
        <appender-ref ref="console" />
        <appender-ref ref="rolling-file" />
    </root>
</log4j:configuration>

Anahtar kısım

<logger name="org.hibernate">
    <level value="info" />
</logger>

Bu yardımcı olur umarım.


5

İşte kullandığım şey:

<logger name="org.hibernate">
    <level value="warn"/>
</logger>

<logger name="org.hibernate.SQL">
    <level value="warn"/>
</logger>

<logger name="org.hibernate.type">
    <level value="warn"/>
</logger>

<root>
    <priority value="info"/>
    <appender-ref ref="C1"/>
</root> 

Açıkçası, Hazırda Beklet mesajlarını görmekten hoşlanmıyorum;) - çıktıyı almak için seviyeyi "hata ayıklama" olarak ayarlayın.


3

Cevaplar yararlıydı. Değişiklikten sonra, biri log4j günlük dosyasında ve biri standart konsolda olmak üzere SQL ifadelerinin yinelenen günlüğü var. Standart konsoldan günlüğe kaydetmekten kurtulmak için kalıcılık.xml dosyasını show_sql olarak yanlış olarak değiştirdim. Format_sql'yi true tutmak log4j günlük dosyasını da etkiler, bu yüzden bunu doğru tuttum.

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0">
    <persistence-unit name="myUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:d:\temp\database\cap1000;shutdown=true"></property>
            <property name="dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.connection.username" value="sa"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        </properties>
    </persistence-unit>
</persistence>

0

log4jDosyanızı aşağıdaki gibi kategori etiketiyle yapılandırabilirsiniz (örnek için bir konsol ekleyici ile):

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss} %p %c - %m%n" />
    </layout>
</appender>
<category name="org.hibernate">
    <priority value="WARN" />
</category>
<root>
    <priority value="INFO" />
    <appender-ref ref="console" />
</root>

Böylece, hazırda bekletme modundan gelen her uyarı, hata veya önemli mesaj görüntülenecek, başka bir şey yok. Ayrıca, kodunuz ve kitaplık kodunuz bilgi düzeyinde olacaktır (yani bilgi, uyarı, hata ve ölümcül)

Bir kitaplığın günlük seviyesini değiştirmek için, örneğin devre dışı bırakılmış yay bilgi günlüğüne bir kategori eklemeniz yeterlidir:

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

Veya başka bir ekleyici ile toplamayı bozun (eklenebilirlik varsayılan değeri doğrudur)

<category name="org.springframework" additivity="false">
    <priority value="WARN" />
    <appender-ref ref="anotherAppender" />
</category>

Ve her sorguyu hazırda bekletme günlüğünü istemiyorsanız, hazırda bekletme özelliğini show_sqlolarak ayarlayın false.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.