在Catalina.out中控制SQL日志记录级别

时间:2017-03-10 22:34:42

标签: linux hibernate logging log4j catalina.out

我们的应用程序在Tomcat 8和Linux上运行。我们有war4附带的log4j.xml,它控制我们的应用程序日志记录的日志记录级别。 log4j还定义了SQL的日志记录级别。

在hibernate.cfg.xml中,“hibernate.show_sql”设置为true。

<property name="hibernate.show_sql">true</property>

在$ CATALINA_BASE / conf / logging.properties

对ConsoleAppender的所有引用:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

被删除,因此除了SQL语句之外没有任何内容被发送到std。

:“hibernate.show_sql”&gt; true,将正在处理的所有SQL语句发送到catalina.out - 请注意catalina.out是仅在Linux / Unix计算机上创建的文件。

我读到“hibernate.show_sql”&gt; true,将SQL语句记录在DEBUG级别。问题是我想在ERROR级别记录这些语句但不知道如何控制级别?

我读到可以通过log4j.xml控制SQL日志记录的级别,但是在log4j.xml中更改它对catalina.out的记录方式没有影响。有谁知道如何控制catalina.out中的SQL日志记录只能处于ERROR级别?

下面是log4j.xml。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="mylog" class="org.apache.log4j.RollingFileAppender">        
    <param name="File" value="${catalina.base}/logs/mylog.log" />
    <param name="Threshold" value="TRACE" />
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="300MB" />
    <param name="MaxBackupIndex" value="10" />
    <layout class="it.openutils.log4j.FilteredPatternLayout">
        <param name="ConversionPattern"
            value="%d{ISO8601} %5p [%t] Executor:%X{Executor} Type:%X{Type}     A:%X{Account} C:%X{Campaign} %c{1}:%L - %m%n" />            
    </layout>
</appender>

<logger name="org.hibernate.SQL" additivity="false">
    <level value="ERROR" />
    <appender-ref ref="mylog" />
</logger>

<logger name="org.hibernate">
        <level value="ERROR"/>
</logger>
<logger name="org.hibernate.jdbc.JDBCContext">
        <level value="ERROR"/>
</logger>

<root>
    <level value="info" />
    <appender-ref ref="mylog" />
</root>

1 个答案:

答案 0 :(得分:0)

由于我无法找到将Catalion.out的级别设置为ERROR,因此我决定一起关闭SQL日志记录。所以我将log4j.xml中的所有级别更改回INFO,并在hibernate.cfg.xml中将此属性设置为false。

Sub copycell()

    Dim sh As Worksheet
    Dim wb As Workbook
    Dim DestSh As Worksheet
    Dim LastRow As Long

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Set wb = ThisWorkbook
    Set DestSh = wb.Sheets("Data")

    ' Loop through worksheets that start with the name "20"

    For Each sh In ActiveWorkbook.Worksheets

                ' Specify the range to copy the data

        sh.Range("D5").Copy


        ' Paste copied range into "Data" worksheet in Column D

        With DestSh.Range("D4:D300")
            .PasteSpecial xlPasteValues
            .PasteSpecial xlPasteFormats
            Application.CutCopyMode = False
        End With


    Next

End Sub

经过一段时间的记录,我注意到除非发生错误,否则Catalina.out中没有记录任何内容,因此在这种情况下,错误和异常将记录到Catalina.out而不是常规SQL语句,这是(几乎)我试图在第一时间实现的东西。我不知道为什么会出现这种情况以及定义这些日志记录级别的位置和方式。但希望能帮助某人。