首页 > 解决方案 > 将 Elasticsearch 查询记录到 spring 数据 elasticsearch 的日志文件中

问题描述

我正在尝试为我的 Spring Boot 应用程序设置多个日志文件。我已经配置了 logback.xml 文件。我可以在我的日志文件中附加休眠弹簧数据查询。但是,当我尝试在 spring-data-elasticsearch 存储库创建的日志文件上附加 elasticsearch 查询日志时,我没有在文件中获得任何日志。我在我的 logback.xml 文件中添加了这个:

 <configuration>

    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{40}.%M - %msg%n" />


    <property name="APP_LOG_ROOT" value="/mylog/log"/>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <appender name="applicationLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APP_LOG_ROOT}/application.log</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${APP_LOG_ROOT}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

            <timeBasedFileNamingAndTriggeringPolicy

                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>5MB</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>


    <appender name="hibernateLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APP_LOG_ROOT}/hibernate.log</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${APP_LOG_ROOT}/hibernate.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

            <timeBasedFileNamingAndTriggeringPolicy

                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>5MB</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="databaseLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APP_LOG_ROOT}/database.log</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${APP_LOG_ROOT}/database.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

            <timeBasedFileNamingAndTriggeringPolicy

                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>5MB</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>


    <!--<logger name="org.hibernate.type.descriptor.sql" level="trace">-->
    <logger name="org.hibernate.SQL" level="trace" additivity="false">
        <appender-ref ref="hibernateLog" />
    </logger>

    <logger name="org.springframework.data.elasticsearch.client.WIRE" level="trace">
        <appender-ref ref="databaseLog" />
        <appender-ref ref="console" />
    </logger>
    <logger name="com.test" level="info">
        <appender-ref ref="applicationLog" />
        <!--<appender-ref ref="console" />-->
    </logger>

    <root level="info">
        <appender-ref ref="console" />
    </root>


</configuration>

我也从这里尝试过

<logger name="org.springframework.data.elasticsearch.core.*" level="debug" additivity="false">
            <appender-ref ref="databaseLog" />
            <appender-ref ref="console" />
        </logger>

但两者都没有奏效。如何解决这个问题?我不想从属性文件中设置它们,因为我不知道如何为文件中的多个文件配置日志记录.properties另一个
问题:如果我多次为多个包引用同一个日志附加器,会有什么问题吗?

标签: springelasticsearchspring-logback

解决方案


您可以启用传输层日志记录以查看实际发送到服务器和从服务器接收的内容。

您可以使用以下记录器启用它:

<logger name="org.springframework.data.elasticsearch.client.WIRE" level="trace"/>

或者

您可以将以下属性添加到您的 application.properties 文件中:

logging.level.org.springframework.data.elasticsearch.client.WIRE = trace

请参考弹簧文档

我已经在我的本地机器上测试了这个解决方案,它在日志中的打印请求和响应。我正在使用 RestHighLevelClient 和 Spring Boot 版本 - 2.2.7.RELEASE。

请查看我的logback.xml文件:

<configuration>
    <property name="LOGS" value="./logs" />

    <appender name="databaseLog"
        class="ch.qos.logback.core.FileAppender">
        <file>${LOGS}/spring-data-elasticsearch.log</file>
        <encoder
            class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
        </encoder>
    </appender>

    <logger
        name="org.springframework.data.elasticsearch.client.WIRE"
        level="trace">
        <appender-ref ref="databaseLog" />
    </logger>
</configuration>

推荐阅读