log4j2配置文件

log4j2配置文件使用

日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

以下是配置文件的解释

  • Appenders 日志输出方向集合

    Appenders子标签

    • Console 输出到屏幕

      Console 属性

      name:自定义ConsoleAdapter名,此值用于AppenderRef的ref属性引用

      target:SYSTEM_OUT或SYSTEM_ERR,一般只设置默认:SYSTEM_OUT

      Console 子标签

      • PatternLayout 输出格式

        pattern:自定义日志输出格式

      • ThresholdFilter 阈值过滤器(控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch))

        ThresholdFilter 属性

        level:控制台仅输出自选的日志级别的日志信息

        onMatch:ACCEPT/DENY

        onMismatch:ACCEPT/DENY

    • File 日志输出至文件

      File 属性

      name:自定义FileAdapter名,此值用于AppenderRef的ref属性引用

      fileName:日志输出文件名,如:"logs/app.log"

      File 子标签

      • PatternLayout 日志输出格式

        pattern:自定义日志输出格式

    • RollingFile 日志滚动输出至文件

      RollingFile 属性

      name:自定义RollingFileAdapter名,此值用于AppenderRef的ref属性引用

      fileName:日志文件全路径

      filePattern:当日志文件滚动【即因为文件大小、时间等条件触发的新日志文件创建)时,归档日志文件的命名规则和位置】此格式将标识日志滚动按天,小时,分钟滚动,比如

      # 日志按小时滚动
      logs/app-%d{yyyy-MM-dd-HH}.log.gz
      # 日志按天滚动
      logs/app-%d{yyyy-MM-dd}.log.gz
      

      bufferedIO:日志在写入时是否使用缓冲;使用缓冲I/O可以提高日志写入的性能,尤其是在写入大量小消息时。然而,这也意味着在应用程序崩溃或关闭时,可能会有一些日志消息仍然留在缓冲区中未写入磁盘,这可能会导致数据丢失。

      RollingFile 子标签

      • PatternLayout 日志输出格式

        pattern:自定义日志输出格式

      • Policies 策略

        子标签

        • SizeBasedTriggeringPolicy 基于大小触发的策略(根据文件大小自动切割日志)

          SizeBasedTriggeringPolicy属性

          size:文件大小,日志超过size规定后自动切割

        • TimeBasedTriggeringPolicy 基于时间触发的策略(根据时间自动切割日志)

          TimeBasedTriggeringPolicy属性

          interval:滚动文件的频率。它可以是任意正整数,通常表示的是天数(它也可以被解释为小时、分钟等,但通常用于表示天)

          modulate:设置为true时,滚动将在每天的指定时间进行,而不是从日志事件的最后一次写入时间开始计算。这有助于确保滚动发生在每天的固定时间

      • DefaultRolloverStrategy默认滚动策略(默认保留最近多少份日志)

        DefaultRolloverStrategy属性

        max:自定义保留的最近的日志数量

        DefaultRolloverStrategy 子标签

        • delete 定期删除日志文件的策略

          delete属性

          basePath:日志文件所在的基础路径

          maxDepth:搜索子目录层级

          delete 子标签

          • IfFileName 文件名匹配

            IfFileName属性

            glob:正则表达式

          • IfLastModified 最后一次更新日期匹配

            IfLastModified 属性

            age:距今时长

    • Async 异步日志;提高日志记录的性能,特别是在高并发和高日志生成率的场景下

      Async属性

      bufferSize:日志事件的内部缓冲区大小

      blocking:因日志事件的生产速度超过消费速度,导致日志队列满时,blocking性决定了AsyncAppender的行为,当blocking设置为true时,如果日志队列已满AsyncAppender将阻塞生产线程,直到有空间可用或达到超时时间。这可以确保所有志事件都被处理,但可能会降低应用程序的性能。
      当blocking设置为false时,如果日志队列已满,AsyncAppender将丢弃新的日志件或采用其他策略来处理这些事件(这取决于errorRef和discardThreshold等置)。这可以避免生产线程被阻塞,但可能会导致一些日志数据丢失。

      Async子标签

      • AppenderRef

        AppenderRef属性

        ref:引用<Appenders>标签下的子标签的name值

  • Loggers

    • logger Logger节点用来单独指定日志的形式,比如为指定包下的class指定不同的日志级别等

      logger 属性

      name:包名/全类名

      level:日志输出级别

      additivity:是否加入到日志中,false:排除,true:加入

      logger 子标签

      • AppenderRef 输出方向

        AppenderRef属性

        ref:引用<Appenders>标签下的子标签的name值

    • Root 根日志

      Root属性

      level:日志输出级别

      Root子标签

      • AppenderRef 输出方向

        AppenderRef属性

        ref:引用<Appenders>标签下的子标签的name值

RollingFile(RollingFileAppender) 和 File(FileAppender) 的区别

FileAppender:将日志事件写入到一个指定的文件中。当文件达到一定大小或达到某个时间点时,FileAppender不会自动创建新的文件或删除旧的文件。因此,如果日志文件持续增长,可能会导致磁盘空间不足的问题。

RollingFileAppender:当日志文件达到指定的大小、时间或其他条件时,RollingFileAppender会创建新的日志文件并继续写入。同时,它还可以配置删除旧的日志文件,以保持磁盘空间的合理使用。(生产环境使用RollingFileAppender)

log4j2 日志输出格式定义

  • 日期 %d{yyyy-MM-dd HH:mm:ss} 括号里的日期定义根据需求来,比如只用精确到天:%d
  • 线程名 %t
  • 记录器类名 %c 或 %c{n} n指代从这个类往前数n层输出,举个例子,类 com.pz.connect.socket.consumer.GetMes,定义%c{3}仅在日志输出socket.consumer.GetMes,而不会输出全类名

    什么是记录器?比如这个TDemo类,日志中打印warn say,TDemo就是记录器

    public class TDemo {
        private Logger logger = LoggerFactory.getLogger(TDemo.class);
        public void say(){
            logger.warn("warn say");
        }
    }
    
  • 日志级别:%p 或 %level(建议参考格式对齐使用 %5leven 或 %5p)
  • 日志信息:%m 或 % msg
  • 换行:%n
  • 输出所在方法名:%M
  • 输出所在行号:%L

格式对齐

以上的输出格式%m,%msg,%p等都可以用类比C语言printf的输出格式对齐方式输出:"%m.ns":输出m位,取字符串(左起)n位,左补空格

概念

Appenders 日志的输出形式

  • ConsoleAppender 控制台输出
  • FileAppender 文件形式输出
  • RollingFileAppender 滚动文件形式输出
  • AsyncAppender 异步输出

Loggers:控制日志输出,控制哪些appender可以被输出,哪些不被输出

PatternLayout:日志输出格式

posted @   勤匠  阅读(313)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示