spring-boot - 如何在spring boot中打印2个不同文件中2个类的日志
问题描述
我在 application.properties 中设置了 logging.file=C:/usr/local/tomcat/logs/hib.log 并在类中设置如下
private static final Logger logger = LogManager.getLogger(ChargeMasterController.class);
logger.info("Total time taken for is ---------------------------" + time + " ms");
日志在作为 logging.file 提到的路径中打印得很好。
现在我想在 2 个不同的文件中为 2 个不同的类(在同一个包中)打印我的日志,如何在 application.properties 中设置 2 个 logging.file
解决方案
你不能用 Spring 提供的配置来做到这一点。但是由于spring-boot-starter-logging
默认使用 Logback,您可以使用 Logback 配置来代替并定义多个 appender,例如:
<appender name="FILE1" class="ch.qos.logback.core.FileAppender">
<file>log1.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE2" class="ch.qos.logback.core.FileAppender">
<file>log2.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
之后,您可以将FILE1
appender 用于第一堂课,FILE2
将 appender 用于第二堂课以及STDOUT
所有其他课程。这可以通过定义记录器来完成:
<logger name="com.example.pkg.ClassName1" additivity="false" level="info">
<appender-ref ref="FILE1" />
</logger>
<logger name="com.example.pkg.ClassName2" additivity="false" level="info">
<appender-ref ref="FILE2" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
如您所见,根记录器旁边有两个记录器,分别称为com.example.pkg.ClassName1
和com.example.pkg.ClassName2
。这些应该与应该记录到单独文件的类的名称相匹配。
additivity="false"
确保发送到log1.log
或不发送到控制台的日志很重要,log2.log
因为它们也会匹配根记录器。
此配置可以放在logback.xml
类路径上的文件中(例如。src/main/resources
)。或者,您也可以使用 中的logging.config
属性来配置位置application.properties
。例如:
logging.config=file:/path/to/logback.conf
或者,如果您想在类路径上使用任意位置:
logging.config=classpath:my/logback.conf
推荐阅读
- hadoop - 如何在启用 kerberos 的 HDFS 中创建非超级用户
- c++ - clang-7:错误:链接器命令失败,退出代码为 1
- sql - 如何在其他列的基础上填充一列?
- gradle - 无法在 Kotlin 上导入 gradle 依赖项的类
- opencv - OpenCV-如何从相机旋转捕获的视频
- node.js - 对于处理 Sequelize 的方法的调用,这看起来很典型吗?
- python - Python pyqt5 使用默认参数和附加参数发送信号
- python-2.7 - 如何在 HAC 中对某些对象进行聚类,但它们具有相同的余弦相似度值
- docker - 即使没有容器映射到该端口,与 K8 pod 端口的连接是否会成功?
- git - Git 和 Intelijj IDEA 远程拉取请求