Spring服务器如何配置实现catalina.log达到指定大小后自动转存备份
Tomcat catalina.log 日志复制与滚动管理方案
问题1:catalina.log 日志复制到其他文件的实现方式
可以实现catalina.log日志同步输出到其他自定义文件,根据Spring服务的部署方式分两种场景配置:
场景1:Spring服务使用外置独立Tomcat部署
修改Tomcat根目录下conf/logging.properties配置即可:
- 新增自定义文件处理器,比如需要同时输出到
custom-app.log,添加如下配置:
handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler, 2custom.org.apache.juli.FileHandler # 自定义日志文件基础配置 2custom.org.apache.juli.FileHandler.level = FINE 2custom.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 2custom.org.apache.juli.FileHandler.prefix = custom-app. 2custom.org.apache.juli.FileHandler.suffix = .log # 配置catalina日志同时输出到默认处理器和自定义处理器 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 1catalina.org.apache.juli.FileHandler, 2custom.org.apache.juli.FileHandler
场景2:Spring Boot使用内嵌Tomcat部署
Spring Boot默认使用logback作为日志实现,直接修改resources/logback-spring.xml配置,添加catalina日志的多目标输出规则即可,示例配置片段:
<!-- 捕获内嵌Tomcat的catalina日志输出 --> <logger name="org.apache.catalina" level="INFO" additivity="false"> <appender-ref ref="CATALINA_FILE"/> <appender-ref ref="CUSTOM_CATALINA_FILE"/> </logger> <!-- 输出到原catalina.log的appender --> <appender name="CATALINA_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/catalina.log</file> </appender> <!-- 输出到自定义复制文件的appender --> <appender name="CUSTOM_CATALINA_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/catalina-copy.log</file> </appender>
问题2:按大小阈值的catalina.log滚动转存解决方案
无需额外安装工具,直接通过原生配置即可实现,主流有两种适配方案:
方案1:日志框架自带滚动策略(Spring服务推荐使用)
如果是Spring Boot内嵌Tomcat场景,通过logback配置即可实现指定大小(比如2GB)自动转存,修改logback-spring.xml的对应appender配置:
<appender name="CATALINA_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/catalina.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 转存归档文件的命名规则,支持按日期+序号区分 --> <fileNamePattern>${LOG_PATH}/archived/catalina.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <!-- 单文件最大阈值,可根据需求调整为1GB/3GB等 --> <maxFileSize>2GB</maxFileSize> <!-- 所有归档日志总大小上限,避免占满磁盘 --> <totalSizeCap>50GB</totalSizeCap> <!-- 归档日志最长保留天数 --> <maxHistory>30</maxHistory> <!-- 服务启动时自动清理超出保留规则的日志 --> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender>
配置生效后,catalina.log达到设定阈值时会自动压缩转存到archived目录下,原catalina.log清空后继续写入新日志。
方案2:外置Tomcat使用自带JULI日志滚动配置
修改conf/logging.properties中的catalina日志处理器配置:
1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. # 启用按大小滚动规则 1catalina.org.apache.juli.FileHandler.rotatable = true # 单文件最大大小,单位为字节,2GB对应2147483648 1catalina.org.apache.juli.FileHandler.maxFileSize = 2147483648 # 归档日志最长保留天数 1catalina.org.apache.juli.FileHandler.maxDays = 30
注意事项
- 不要手动修改正在写入的catalina.log文件,避免日志写入中断
- 生产环境建议开启归档日志压缩,可节省80%以上的磁盘占用
- 若需自定义转存路径,直接修改配置中的directory或fileNamePattern参数即可
内容的提问来源于stack exchange,提问作者Mahaveer Saini
相关产品推荐
相关产品推荐

