QuickFix/J日志配置咨询:定时/按大小归档及日志数量限制删除
QuickFix/J日志归档与自动删除配置方案
可以实现类似Logback的日志滚动归档和自动清理功能,但QuickFix/J原生的默认日志组件并没有提供开箱即用的这类配置,需要通过以下两种方式实现:
方式一:自定义日志组件
QuickFix/J允许通过实现LogFactory和Log接口定制日志行为,你可以自行实现支持时间/大小触发归档、自动删除旧日志的逻辑:
- 编写自定义
RollingFileLog类:封装文件操作逻辑,比如通过定时任务检测每日午夜触发归档,或当文件达到指定大小后触发归档;归档时将当前日志文件重命名为带时间戳的归档文件(如fix-session-20240520.log) - 添加日志数量限制逻辑:每次归档完成后,遍历归档目录下的日志文件,按创建时间排序,删除超出数量x的最早文件
- 实现自定义
LogFactory:继承FileLogFactory,重写create方法返回自定义的RollingFileLog实例 - 在QuickFix/J配置文件中指定自定义工厂:
注意要处理好线程安全,避免多会话日志操作时出现文件冲突。LogFactory=com.yourcompany.quickfix.CustomRollingLogFactory
方式二:借助SLF4J+Logback(推荐)
QuickFix/J支持通过SLF4J桥接将日志输出到外部日志框架,直接复用Logback成熟的滚动和清理机制:
- 引入依赖:添加
quickfixj-slf4j依赖到项目中,让QuickFix/J的日志通过SLF4J输出 - 配置Logback:在
logback.xml中配置滚动策略,示例如下:<appender name="QUICKFIX" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/fix-session.log</file> <!-- 同时支持时间和大小触发滚动 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_DIR}/fix-session-%d{yyyyMMdd}.%i.log</fileNamePattern> <!-- 单个文件最大100MB --> <maxFileSize>100MB</maxFileSize> <!-- 保留30个归档文件 --> <maxHistory>30</maxHistory> <!-- 总日志大小限制(可选) --> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="quickfix" level="INFO" additivity="false"> <appender-ref ref="QUICKFIX"/> </logger> - 配置QuickFix/J:在会话配置中指定SLF4J日志工厂:
这种方式无需自行实现复杂的文件操作逻辑,直接复用Logback的成熟功能,是更省心的方案。LogFactory=quickfix.slf4j.SLF4JLogFactory
注意事项
- 无论哪种方式,都要确保应用程序对日志目录有读写权限,避免归档或删除操作失败
- 自定义日志组件时,要注意处理日志文件的锁机制,防止多线程写入时出现文件损坏
内容的提问来源于stack exchange,提问作者user666
相关产品推荐
相关产品推荐

