日志文件自动压缩

使用 log4j 记录日志,每天0点进行分隔,由于日志文件较大,为节省空间,需要将历史文件自动压缩。需要使用 Apache Extras™ for Apache log4j™  的 org.apache.log4j.rolling.TimeBasedRollingPolicy 类进行配置。配置如下:
<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<!-- Daily Rolling File Appender that compresses old files -->
  <appender name="file" class="org.apache.log4j.rolling.RollingFileAppender" >
     <param name="threshold" value="info"/>
     <rollingPolicy name="file"  
                      class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" 
               value="${catalina.base}/logs/myapp.log.%d{yyyy-MM-dd}.gz"/>
        <param name="ActiveFileName" value="${catalina.base}/logs/myapp.log"/>
     </rollingPolicy>
     <layout class="org.apache.log4j.EnhancedPatternLayout" >
        <param name="ConversionPattern" 
               value="%d{ISO8601} %-5p - %-26.26c{1} - %m%n" />
    </layout>
  </appender>

  <root>
    <priority value="debug"></priority>
    <appender-ref ref="file" />
  </root>
</log4j:configuration>
另外 logback 有许多优点,用它来实现压缩的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
			by default -->
		<encoder>
			<pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>

	<!-- Daily Rolling File Appender that compresses old files -->
	<appender name="file"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>log/app.log</file>
		<rollingPolicy name="file"
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>log/app.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%p [%t] %d %c: %m%n</pattern>
		</encoder>
	</appender>

	<logger name="com.app" level="INFO" />

	<root level="WARN">
		<appender-ref ref="console" />
		<appender-ref ref="file" />
	</root>
</configuration>

参考资料
[1] Apache Extras™ for Apache log4j™. http://logging.apache.org/log4j/extras/
[2] Class TimeBasedRollingPolicy. http://logging.apache.org/log4j/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html
[3] Compress Log4j files. http://stackoverflow.com/questions/3329385/compress-log4j-files
[4] Configuring RollingFileAppender in log4j. http://stackoverflow.com/questions/5117758/configuring-rollingfileappender-in-log4j
[5] TimeBasedRollingPolicy. http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy
[6] Class TimeBasedRollingPolicy<E>. http://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.html
[7] slf4j+logback使用. http://blog.youkuaiyun.com/longaohun/article/details/6782046
[8] logback输出多个日志文件. http://blog.youkuaiyun.com/kimsoft/article/details/7618421
### 如何压缩日志文件 在 Linux 系统中,`logrotate` 是一种常用的日志管理工具,可以用来定期轮转、压缩和删除旧的日志文件。以下是关于 `logrotate` 的一些关键功能及其配置方式: #### 使用 logrotate 进行日志压缩 通过设置 `compress` 参数,可以在日志轮转时自动将其压缩为 `.gz` 文件[^3]。这不仅节省磁盘空间,还便于长期存储。 #### 配置示例 下面是一个典型的 `logrotate` 配置文件示例,展示如何启用日志压缩功能: ```bash /var/log/mysql.log { daily # 每天轮转一次 rotate 7 # 保留最近7天的日志副本 compress # 启用压缩 delaycompress # 推迟一天再执行压缩操作(可选) missingok # 如果日志文件不存在,则不报错 } ``` 上述配置表示每天都会检查 `/var/log/mysql.log` 是否需要轮转;如果满足条件,则会创建一个新的日志文件压缩前一天的日志文件为 `.gz` 格式。 #### 手动压缩日志文件 如果不希望通过 `logrotate` 自动化处理,也可以手动使用命令来压缩单个日志文件。例如,利用 `gzip` 或 `bzip2` 命令完成此任务: ```bash gzip /path/to/yourlogfile.log # 或者 bzip2 /path/to/yourlogfile.log ``` 这些工具能够快速有效地减少日志文件大小,方便后续传输或存档。 #### 注意事项 当涉及到 MySQL 日志或其他敏感数据类型的日志时,请务必确认备份策略合理,并测试整个流程以避免意外丢失重要信息[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值