java - 如何更改slf4j logger的日志文件名
问题描述
我对更改 slf4j 记录器的日志文件的名称有疑问。在 logback.xml 文件中,这被设置为 myApp.log。我希望每次在 Java 中运行我的代码时都能够更改此文件名,其中文件名是我运行问题的设置的组合。正如你可以想象的那样,我宁愿在 Java 中有一些代码,而不是每次在 logback.xml 文件中手动更改它。
我已经在上面的链接中看到了线程,但这似乎对我有用。我目前实现如下
/* Configure parameters */
Properties properties = new Properties();
Configuration.readFromFile(properties);
properties.setProperty("MAXTHREADS", "1");
properties.setProperty("EXPORT_MODEL", "false");
properties.setProperty("log4j.appender.debugFile.File", "test.log");
properties.setProperty("log4j.appender.infoFile.File", "test2.log");
properties.setProperty("log4j.appender.warnFile.File", "test3.log");
properties.setProperty("log4j.appender.errorFile.File", "test4.log");
如果我使用这些设置运行它,输出仍然保存在 myApp.log 中。
欢迎任何建议!
解决方案
您可以使用筛选附加程序,然后
MDC.put("myRun", "runXXXX");
在运行您的代码之前。
在你的 logback.xml 中有这样的东西:
<appender name="MapiContextSplit" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>myRun</key>
<defaultValue>default</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${myRun}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/test-${myRun}.log</file>
</appender>
</sift>
</appender>
推荐阅读
- javascript - 在烧瓶中等待获取没有得到所需的回报
- windows - 连接到隐藏的WiFi“网络”,传输数据并重新连接到原始网络
- amazon-web-services - 如何设置使用 Terraform 添加到 AD 域的新 Win10 实例的主机名?正在工作....现在不工作
- azure-devops - 如何在 Azure DevOps 的办公时间限制发布部署?
- python - 将文本插入 Microsoft Access 数据库
- node.js - 带有 Google 日历 API(时隙)React/NodeJS 的预约系统
- macos - 如何使基于 Electron 的应用程序处理 AppleScript 事件并定义 sdef 接口?
- python - 打包应用程序后运行 python-shell 电子应用程序时出错(通过使用电子生成器)
- .net - 如何将脚本 Powershell 调用到我的后端 .net 核心?
- python - 如何根据其他键更新默认字典中的值