温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Logger 如何按天归档

发布时间:2026-07-17 13:45:49 来源:亿速云 阅读:81 作者:小樊 栏目:编程语言

下面以常见语言和日志框架为例,说明 Logger 如何按天归档(Daily Rolling / Log Rotation)。核心思路都是:文件名带日期 + 定期切换日志文件


一、通用原理(重要)

按天归档通常包含 3 个要素:

  1. 日志文件名包含日期

    app-2026-01-21.log
    app-2026-01-22.log
    
  2. 时间触发切换

    • 按天(daily)
    • 或按文件大小 + 日期组合
  3. 可选:历史日志清理

    • 保留最近 N 天
    • 或按文件数量限制

二、Java(最常见)

✅ Logback(强烈推荐)

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天归档 -->
            <fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保留 30 天 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

✅ 特点:

  • 自动按天生成新文件
  • 无需额外代码
  • 生产环境首选

✅ Log4j2

<RollingFile name="FileAppender"
             fileName="logs/app.log"
             filePattern="logs/app-%d{yyyy-MM-dd}.log">
    <PatternLayout>
        <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1"/>
    </Policies>
    <DefaultRolloverStrategy max="30"/>
</RollingFile>

三、Python

✅ logging + TimedRotatingFileHandler

import logging
from logging.handlers import TimedRotatingFileHandler

handler = TimedRotatingFileHandler(
    filename="app.log",
    when="midnight",      # 按天
    interval=1,
    backupCount=30,
    encoding="utf-8"
)

handler.suffix = "%Y-%m-%d"

logging.basicConfig(
    level=logging.INFO,
    handlers=[handler]
)

生成文件:

app.log
app.log.2026-01-21
app.log.2026-01-22

when="midnight" 表示 每天 0 点归档


四、Node.js

✅ winston + winston-daily-rotate-file

const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '30d'
});

const logger = winston.createLogger({
  transports: [transport]
});

五、Linux 系统级(通用)

即使不用框架,也可以用 logrotate(生产环境非常常见):

/var/log/app/*.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    copytruncate
}

✅ 适合:

  • 所有语言
  • 容器外运行的服务

六、最佳实践建议

生产环境推荐组合

  • Java → Logback
  • Python → TimedRotatingFileHandler
  • Node.js → winston-daily-rotate-file
  • 服务级 → logrotate

避免

  • 单个日志文件无限增长
  • 手动切日志
  • 日志目录无清理策略

如果你能告诉我:

  • 使用的 语言 / 框架
  • 是否 容器(Docker)
  • 是否需要 压缩 / 保留天数

我可以直接给你一份 可复制粘贴的最终配置

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI