【问题标题】:Log Elasticsearch query to a logfile for spring data elasticsearch将 Elasticsearch 查询记录到 spring 数据 elasticsearch 的日志文件中
【发布时间】:2021-08-20 08:25:52
【问题描述】:

我正在尝试为我的 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>

我也试过here

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

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

【问题讨论】:

    标签: spring elasticsearch spring-logback


    【解决方案1】:

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

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

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

    您可以在 application.properties 文件中添加以下属性:

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

    请参考spring docs

    我已经在我的本地机器上测试了这个解决方案,它的打印请求和响应在日志中。我正在使用 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>
    

    【讨论】:

    • 感谢您的帮助。我试过这个。是的,它在控制台上打印日志,但没有像我在问题中提到的那样写在我的 logFile 中。我可以保证我的 logback.xml 其他配置都可以,因为我可以通过同一个日志附录编写-databaseLog
    • 嗨@user404,我可以将日志写入文件。我在答案中添加了我的 logback.xml 文件。如果您仍然无法将日志写入文件,请检查并告诉我。
    • 您能检查一下我现在添加的 logback.xml 文件吗?
    • 我已经在机器上测试了你的 logback.xml 文件。我能够看到文件中的日志:)。你是如何创建 RestHighLevelClient 的 bean 的?我已经扩展了 AbstractElasticsearchConfiguration 类以根据我的要求创建一个 RestHighLevelClient bean。
    • 以这种方式使用`public RestHighLevelClient client() {...}`的构造函数。但是我的 es 客户端没问题,在任何操作中都可以正常工作。我也可以看到 database.log 文件。问题是,该文件没有登录 spring-data-elasticsearch 的弹性查询。
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 2014-11-04
    • 2014-02-26
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2019-11-10
    • 2014-10-16
    相关资源
    最近更新 更多