spring - 将 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
另一个
问题:如果我多次为多个包引用同一个日志附加器,会有什么问题吗?
解决方案
您可以启用传输层日志记录以查看实际发送到服务器和从服务器接收的内容。
您可以使用以下记录器启用它:
<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>
推荐阅读
- python - Scrapy:如何为不同的项目使用不同的 settings.py
- android - 构建多平台 Xamarin 类库 - 单个项目还是多个项目?
- angular - NullInjectorError:Angular 6 中没有 AnimationBuilder 的提供者
- python - 导入 seaborn 时遇到问题
- hadoop - 从配置单元日志中获取给定查询的应用程序 ID
- algorithm - 满足给定约束的模式组合
- video - 如何将视频从 whatsapp 分享到我的应用程序
- firebase - 如何将我的结构数据导入 Firebase?
- xml-parsing - Drools - 从另一个系统解析 XML 数据并确定业务规则
- python - Python 转换错误:int() 的文字无效,基数为 10