java - 将日志记录到单独目录中的主文件和客户端
问题描述
我有一个 Java 服务器应用程序,我将所有常规数据记录到 server.log 和每个单独的客户端到它自己的 hostname.log 文件。我想以某种有组织的方式将 hostname.log 文件放在与 server.log 不同的目录中,因为有数千个 hostname.log 文件。
这是我现在使用的配置:
<appender name="SiftAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>descriminatorid</key>
<defaultValue>server</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${descriminatorid}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${cmb.log.dir}/${descriminatorid}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${cmb.log.dir}/archive/${descriminatorid}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- keep ${maxbackupindex} days' worth of history capped at ${maxfilesize} total size -->
<maxHistory>${cmb.log.maxbackupindex}</maxHistory>
<totalSizeCap>${cmb.log.maxfilesize}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
此配置将所有内容记录到 $cmb.log.dir。我想要的是这样的:
Server logs: $cmb.log.dir/server.log
Client logs: $cmb.log.dir/client/${descriminatorid}.log
或者更好的是:
Client logs: $cmb.log.dir/client/${firstLetter}/${descriminatorid}.log
其中 ${firstLetter} 是 $descriminitorid 的第一个字母。这样,日志将分布在更具可扩展性的层次结构中。
解决方案
我找到的解决方案非常简单。由于我在我的 java 代码中生成 ${descriminatorid} ,因此我简单地将我想要的目录结构包含在该值中。因此,“descriminatorid”不再是“hostname”,而是“client/firstletter/hostname”。
我肯定是想多想这个。
推荐阅读
- java - 我可以默认将方法的参数设为 null 吗?
- assembly - 在 x86 程序集中生成伪随机字符
- python - 如何保存 np.append 成为像这张图片一样的列
- ios - 如何在 Swift 的 tableview 中添加 AdMob Native 广告(使用故事板)
- c# - 用文本替换 if number 语句
- android - C++,Android NDK:如何将我的原始音频数据正确保存到文件并再次加载
- recursion - 动态规划解决fibwords问题
- angular - 如何在 Web 组件中使用服务
- java - 如何在我的 2D Array 程序中修复此变量错误?
- pyspark - Pyspark 将数据帧写入 bigquery [错误 gs]