当前位置: 首页 > news >正文

logger级别及大小

技术大佬们,加我群吧,
群1:868373192,
群2:277356808
群3:102948747

一、 日志级别

日志级别用于标识日志信息的重要性和紧急程度。开发者通过设置级别,可以控制哪些级别的日志需要被输出、记录或处理。

常见的日志级别从高到低(从严重到轻微)通常分为以下几种:

  1. OFF / FATAL:

    • 最高级别。用于关闭所有日志记录,或表示应用发生了最严重的错误事件,可能导致应用程序完全中止。

  2. ERROR:

    • 表示发生了错误事件,但应用程序可能仍然可以继续运行。例如:数据库连接失败、空指针异常、关键业务逻辑执行失败等。需要开发人员立即关注并处理。

  3. WARN:

    • 表示潜在的有害情况或非预期状态,但不会立即影响核心流程。应用程序通常可以恢复正常。例如:使用了过时的API、磁盘空间不足、非核心接口调用超时等。需要关注但不必立即处理。

  4. INFO(最常用):

    • 用于记录应用程序运行过程中的重要信息,通常用于输出业务逻辑的正常状态。例如:程序启动/停止、用户登录成功、订单创建成功等。在生产环境中,通常将此级别作为默认级别。

  5. DEBUG:

    • 用于调试目的,比INFO更详细。通常记录程序运行的细节信息,例如:方法的入参和出参、变量的中间状态、SQL语句等。此级别通常只在开发或测试环境开启,生产环境会关闭,以避免产生大量日志影响性能。

  6. TRACE:

    • 比DEBUG更细致、更底层的跟踪信息。用于追踪程序的每一步执行路径。会产生极其大量的日志,仅在需要深度排查极端复杂的问题时临时开启

级别规则:
日志框架会只输出设置级别及以上级别的日志。

  • 如果设置级别为 WARN,则只会记录 WARNERRORFATAL 级别的日志。

  • 如果设置级别为 DEBUG,则会记录 DEBUGINFOWARNERRORFATAL 级别的日志。


二、 日志文件大小管理

如果不加控制,日志文件会无限增长,最终占满磁盘空间。因此,所有主流的日志框架都提供了“滚动策略”来管理日志文件的大小和数量。

核心思想是:当一个日志文件满足特定条件(如大小达到阈值、时间到了新的一天)时,就将其归档(重命名备份),然后创建一个新的空白日志文件继续记录。

常见的滚动策略配置参数:

  1. 基于文件大小的滚动策略

    • maxFileSize: 单个日志文件的最大大小。当达到这个大小时,就会触发滚动。

      • 例如:10MB100MB1GB

    • maxHistory: 最多保留的归档日志文件数量。超过这个数量的最旧的归档文件会被自动删除,以防止磁盘被写满。

      • 例如:设置为 30,表示最多保留30个备份文件(如 app.log.1app.log.2, ... app.log.30)。

    • totalSizeCap: 所有归档日志文件的总大小上限。当总大小超过这个限制时,会从最旧的文件开始删除,即使数量还没达到 maxHistory

  2. 基于时间的滚动策略

    • fileNamePattern: 定义归档日志的文件名模式和滚动周期。

      • 例如:/logs/app-%d{yyyy-MM-dd}.log 会每天创建一个新的日志文件。

    • maxHistory: 同样适用,表示最多保留多少天(或其他时间单位)的日志文件。

通常,基于大小的滚动基于时间的滚动会结合使用,例如“按天归档,并且当单日日志量过大时,在同一天内再按大小进行分割”。


三、 配置示例

下面以两个最流行的Java日志框架为例:

1. Logback 配置示例 (logback.xml)

xml

<configuration><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前正在记录的日志文件路径 --><file>/var/log/myapp/app.log</file><!-- 滚动策略:基于大小和时间的混合策略 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 归档文件的名称模式:%d{yyyy-MM-dd}: 按天归档%i: 当一天内日志超过最大大小时,进行索引编号 --><fileNamePattern>/var/log/myapp/archives/app-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern><!-- 每个日志文件最大 100MB --><maxFileSize>100MB</maxFileSize><!-- 最多保留 30 天的日志 --><maxHistory>30</maxHistory><!-- 所有归档文件总大小不超过 3GB --><totalSizeCap>3GB</totalSizeCap></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="FILE" /></root>
</configuration>
2. Log4j2 配置示例 (log4j2.xml)

xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><RollingFile name="FileAppender" fileName="/var/log/myapp/app.log"filePattern="/var/log/myapp/archives/app-%d{yyyy-MM-dd}-%i.log.gz"><!-- 日志格式 --><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1} - %m%n</Pattern></PatternLayout><!-- 滚动策略 --><Policies><!-- 每天滚动一次 --><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!-- 单个文件超过 100MB 时滚动 --><SizeBasedTriggeringPolicy size="100MB" /></Policies><!-- 保留策略 --><DefaultRolloverStrategy max="30" delete="true"><Delete basePath="/var/log/myapp/archives/" maxDepth="1"><!-- 删除超过30天或总大小超过3GB的日志 --><IfLastModified age="30d" /><IfAccumulatedFileSize exceeds="3GB" /></Delete></DefaultRolloverStrategy></RollingFile></Appenders><Loggers><Root level="info"><AppenderRef ref="FileAppender" /></Root></Loggers>
</Configuration>

总结与最佳实践

  1. 级别选择

    • 生产环境:通常使用 INFO 或 WARN

    • 测试/预发布环境:可以使用 DEBUG 来排查问题。

    • 开发环境:可以使用 DEBUG 或 TRACE

  2. 大小管理

    • 必须配置滚动策略,绝不能放任日志无限增长。

    • 根据应用日志量和磁盘空间,合理设置 maxFileSize(如100MB-1GB)和 maxHistory(如保留7-30天)。

    • 设置 totalSizeCap 作为最后的安全网,防止误算导致磁盘爆满。

  3. 日志清理

    • 推荐使用日志框架自带的 maxHistory 和 totalSizeCap 机制自动删除旧日志,而不是依赖外部Cron作业,这样管理更清晰、更可靠。

通过合理配置日志级别和滚动策略,你可以既能获取足够的信息来监控和调试应用程序,又能确保日志系统本身是高效、稳定且不会成为系统的负担。

http://www.dtcms.com/a/342290.html

相关文章:

  • 如何安装和配置W3 Total Cache以提升WordPress网站性能
  • C++设计模式--策略模式与观察者模式
  • 小红书AI落地与前端开发技术全解析(From AI)
  • Python 正则表达式(更长的正则表达式示例)
  • 【基础排序】CF - 赌场游戏Playing in a Casino
  • 机器学习4
  • 精算中的提升曲线(Lift Curve)与机器学习中的差别
  • 网络打印机安装操作指南
  • 健康常识查询系统|基于java和小程序的健康常识查询系统设计与实现(源码+数据库+文档)
  • CentOS7安装部署PostgreSQL
  • 《PostgreSQL内核学习:slot_deform_heap_tuple 的分支消除与特化路径优化》
  • ES_文档
  • 2025-08-21 Python进阶6——迭代器生成器与with
  • Python项目开发- 动态设置工作目录与模块搜索路径
  • strerror和perror函数的使用及其联系和区别
  • 43-Python基础语法-3
  • QWidget/QMainWindow与QLayout的布局
  • CSDN使用技巧
  • Pandas中数据分组进阶以及数据透视表
  • 链表-143.重排链表-力扣(LeetCode)
  • 微信小程序集成vant-weapp时,构建npm报错的解决办法
  • 基于springboot的中医养生管理系统
  • Pytorch基础学习--张量(生成,索引,变形)
  • 火语言 RPA 进阶功能:让自动化更实用​
  • 交易高光时刻-01
  • SOP到自动化:一种适合小型金融机构的轻量级开源工具整合方案
  • Vue3+Spring Boot技术栈,前端提交混合表单数据(普通字段+文件字段),上传文件,后端插入数据,将文件保存到数据库
  • Docker端口映射与数据卷完全指南
  • 几张PPT快速了解云原生与华为云CCE方案
  • Eureka和Nacos的原理分析