java - 如果 log4j2 不存在,则阻止 log4j2 创建日志文件的父文件夹
问题描述
正如问题的标题所述,如果它们不存在,是否可以避免创建 log4j2 File appender 日志文件的父文件夹?实际上,当我传递文件 appender 日志的不存在的父文件夹时,它将由 log4j2 自动创建。我已经尝试查看File
标签上是否有属性,但什么也没有。
https://logging.apache.org/log4j/2.x/manual/appenders.html
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="File" fileName="${sys:app.home}/app.log"
ignoreExceptions="false">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
</Appenders>
解决方案
没有这样的选择。这是 FileAppender 的源代码,您可以在其中看到父文件夹的创建。如果您想避免创建文件夹,那么您可以创建自己的 FileAppender 继承者并覆盖 setFile 方法。
public synchronized void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)
throws IOException {
....
FileOutputStream ostream = null;
try {
ostream = new FileOutputStream(fileName, append);
} catch(FileNotFoundException ex) {
String parentName = new File(fileName).getParent();
if (parentName != null) {
File parentDir = new File(parentName);
if(!parentDir.exists() && parentDir.mkdirs()) { //This is were parent folders are created
ostream = new FileOutputStream(fileName, append);
} else {
throw ex;
}
} else {
throw ex;
}
}
....
推荐阅读
- vba - 我的更新语句有问题——出现错误 3144
- sql-server - SSIS - 如何在运行时启动连接管理器?
- app-store-connect - 接受与 Apple ID 不同的电子邮件地址的 TestFlight 邀请?
- javascript - 当用户在我的网页上按下按钮时,如何向服务器发送请求以运行 node.js 文件?
- vue.js - 如何更改空表样式:元素 UI?
- java - 如何在junit集成测试期间启动/停止java应用程序
- javascript - 具有可重用事件处理程序方法的自定义元素类
- python - 我想使用 Python 检查 sheet1 中某个列上存在的值是否也存在于 sheet2 上
- c# - 用于将数据提交和保存到网站的 HttpRequest Post 方法
- java - 无法访问谓词中所需的参数