验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Logger 如何按天归档

阅读:377 来源:乙速云 作者:代码code

Logger 如何按天归档

下面以常见语言和日志框架为例,说明 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.logfile>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>logs/app-%d{yyyy-MM-dd}.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%npattern>
        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%nPattern>
    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)
  • 是否需要 压缩 / 保留天数

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

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>