Logback配置文件
创始人
2025-05-29 20:10:08
0

SpringBoot 默认使用 logback 作为日志框架,可在 resources 文件夹下添加 logback.xml 文件进行配置。

一个简单的示例文件内容如下

  project_name%-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %nlogs/info.loglogs/info.%i.log.zip1500200MB%-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%nlogs/error.loglogs/error.%i.log.zip1100200MB%-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%nERRORACCEPTDENY

配置文件中定义了三个输出器(appender),一个用于将日志输出到控制台,另一个用于将日志输出到名为 info.log 的文件中,另一个讲日志输出到 error.log 中。文件输出器都用了日志文件轮转策略(rolling policy),以按时间戳生成新的日志文件,并保留最近 100 个日志文件。

配置文件还定义了两个日志记录器(logger):一个用于记录名为 com.qinghuazs.blog 的应用程序的 INFO 级别日志,另一个是根日志记录器(root logger),将所有级别的日志输出到三个输出器中。

日志记录器通过 name 属性来指定日志记录器的名称,level 属性用来设置日志记录器的级别,即只输出级别高于或等于该级别的日志信息。appender-ref 元素用来引用日志输出器。

configuration

configuration 元素是 Logback 配置文件的根元素,表示整个配置文件。

configuration元素有几个重要的属性,包括debug、scan、scanPeriod和shutdownHook。

  • debug:该属性用于指示是否启用Logback的调试模式。如果设置为true,则会在控制台上打印出Logback的内部状态信息,以帮助排查问题。
  • scan:该属性用于指示是否启用配置文件的扫描功能。如果设置为true,则Logback会定期检查配置文件是否发生变化,并自动重新配置。
  • scanPeriod:当scan属性设置为true时,该属性指定了扫描配置文件的时间间隔。默认值为1分钟。
  • shutdownHook:该属性用于指示是否在应用程序关闭时自动关闭Logback。如果设置为true,则Logback会注册一个JVM关闭钩子来关闭日志系统。

appender

在Logback中,appender用于指定日志信息的输出方式,可以将日志信息输出到控制台、文件、数据库、远程服务等地方。每个appender定义了一组输出规则,即指定了输出的目标和输出格式等信息。

Logback中内置了多种appender类型,例如:

  1. ConsoleAppender:将日志信息输出到控制台;
  2. FileAppender:将日志信息输出到文件;
  3. RollingFileAppender:在文件中记录日志,并可进行文件滚动,即将日志记录到新的文件中;
  4. DBAppender:将日志输出到数据库
  5. SMTPAppender:将日志信息通过电子邮件发送
  6. SyslogAppender:将日志输出到系统日志
  7. SocketAppender:将日志信息通过TCP/IP协议发送到远程服务等等。

每个appender都有自己的配置选项,可以通过配置文件进行配置。例如,FileAppender可以通过配置文件指定日志文件的路径和文件名,RollingFileAppender可以通过配置文件指定日志文件的滚动策略和备份文件的数量。

在配置appender时,需要指定appender的类型、输出目标、输出格式等信息,name 属性用来指定日志输出器的名称,class 属性用来指定使用的具体输出器的类,encoder 元素则用来定义日志信息的格式。

ConsoleAppender

%-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n

%date{yyyy-MM-dd HH:mm:ss.SSS} 用于以 yyyy-MM-dd HH:mm:ss.SSS 格式输出时间信息;

[%thread]表示输出线程信息;

%-5level 表示输出日志级别(左对齐,最多占5个字符的宽度);

%logger{36} 表示输出logger名称(左对齐,最多占36个字符的宽度);

%msg 表示输出日志信息;

%n 表示输出一个换行符;

%-4relative 用于输出相对时间,具体含义如下:

  • %:占位符的起始标识
  • -:负号表示左对齐
  • 4:输出宽度为4
  • relative:输出相对时间

相对时间是指自应用程序启动以来经过的时间,格式为带小数点的毫秒数。%-4relative 用于将相对时间按左对齐,固定宽度为4的格式输出。%-4relative 在排版日志时可以使得时间戳对齐,易于查看日志的时序性。

FileAppender

log/app.log%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

RollingFileAppender

/var/log/myapp.logtrue/var/log/myapp.%d{yyyy-MM-dd}.log710MB%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
log/app.loglog/app.%d{yyyy-MM-dd}.%i.log.gz10MB301GB%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

属性说明:

  • name:appender的名称,必填。
  • file:日志输出文件的路径和名称,必填。
  • append:是否在文件末尾追加,默认为true。
  • rollingPolicy:滚动策略,必填。可以选择 FixedWindowRollingPolicy 或 TimeBasedRollingPolicy ,前者根据日志文件大小进行切割,后者根据时间进行切割。
  • triggerPolicy:触发策略,必填。可以选择 SizeBasedTriggeringPolicy 或 TimeBasedTriggeringPolicy,前者根据日志文件大小触发滚动,后者根据时间触发滚动。
  • encoder:输出格式,必填。例如,PatternLayoutEncoder 可以将日志消息转换为指定的格式。
  • maxFileSize:单个日志文件最大大小,默认10MB。
  • maxHistory:保存的历史日志文件最大个数,默认7个。

其他类型的Appender用的不多,如果感兴趣的话可以自行去了解。

Filter

在 logback 中,Appender Filter 是一种可以用于控制哪些日志事件可以被记录的组件。可以配置多个 Filter,每个 Filter 可以独立作用于同一个 Appender 的日志事件,只有当所有的 Filter 都允许这条日志事件才会被记录。

Appender Filter 的常用属性和用途如下:

  • class:必须指定实现了 ch.qos.logback.core.filter.Filter 接口的类名。
  • onMatch:表示匹配 Filter 的事件是否应该被记录,取值为 ACCEPT 或 DENY,默认为 ACCEPT。
  • onMismatch:表示未匹配 Filter 的事件是否应该被记录,取值为 ACCEPT 或 DENY,默认为 ACCEPT。

比如,下面的配置表示只记录 level 为 ERROR 的日志事件:

ERRORACCEPTDENY%-4relative [%thread] %-5level %logger{35} - %msg%n

还可以结合其他 Filter 来实现更复杂的逻辑,例如条件组合、正则表达式匹配等,如下示例:

message.contains("error") || level >= WARNNEUTRALACCEPT

level >= INFODENYACCEPT

第一个filter使用 JaninoEventEvaluator类,它将表达式设置为“message.contains(‘error’)|| level >= WARN”,意思是当日志消息中包含“error”或级别为WARN或更高级别时,该消息将被接受。

第二个filter使用JaninoEventEvaluator类,将表达式设置为“level >= INFO”,意思是当级别为INFO或更高级别时,该消息将被接受。

如果日志消息包含“error”或级别为WARN或更高级别,则第一个filter将接受消息,并将其传递给后续的filter和appender。如果消息不匹配第一个filter的条件,则该消息将被中立地处理。然后,如果级别为INFO或更高级别,则第二个filter将接受消息,并将其传递给appender。否则,消息将被拒绝,并不会传递给appender。

logger

在 logback 的配置文件中,logger 元素用于配置日志记录器。一个 logger 元素包含以下几个主要属性:

  • name:指定日志记录器的名称。这个名称通常是全限定类名,但也可以是任何你想要的名称。这个名称与日志记录器实例相关联。
  • level:指定日志记录器的级别。只有高于或等于这个级别的日志消息才会被记录。级别从高到低分别为 TRACE、DEBUG、INFO、WARN、ERROR 和 OFF。如果没有指定该属性,则默认为 DEBUG 级别。
  • additivity:指定该日志记录器是否将其日志消息传递给父记录器。如果设置为 false,则该日志记录器的日志消息只会被发送到其直接附加的 appender 中,而不会被传递到其父记录器的 appender 中。默认值为 true。
  • appender-ref:指定将日志消息发送到哪些 appender 中。这个属性的值可以是一个或多个 appender 的名称,多个 appender 之间用逗号分隔。


这个示例配置了一个名为 com.example.myapp 的日志记录器,级别为 INFO,不向其父记录器传递日志消息。它将日志消息发送到名为 console 和 file 的两个 appender 中。

root

root是logback的根日志记录器,所有没有指定具体日志记录器的日志事件都会被转发到根日志记录器进行处理。在logback的配置文件中,根日志记录器通常通过元素进行配置。

根日志记录器可以设置一些通用的属性,例如输出级别(level)、Appender等,这些通用属性会被所有子日志记录器继承和应用。例如,如果将根日志记录器的输出级别设置为DEBUG,则所有子日志记录器的输出级别都将默认为DEBUG,除非它们明确指定了不同的输出级别。



在这个示例中,根日志记录器被设置为输出级别为INFO,并将一个名为CONSOLE的控制台Appender添加到其中。此外,由于没有为根日志记录器设置logger元素,因此所有日志事件都会被转发到根日志记录器进行处理,并由根日志记录器将它们输出到控制台上。

contextName

contextName是指Logback日志系统中的上下文名称,可以看作是Logback日志系统的一个实例。它是在Logback配置文件中定义的,并且是全局唯一的。

contextName在多实例的情况下非常有用,例如在一个Web应用程序中,每个Web应用程序可能需要一个自己的日志实例。这时,可以使用contextName来为每个应用程序创建不同的日志实例,将它们隔离在不同的LoggerContext中,并为每个应用程序或模块提供自己的配置。

相关内容

热门资讯

银行、消金公司助贷余额增速不得... 近日,中国证券报记者从多位业内人士处独家获悉,5月以来,多地金融监管部门对部分中小银行、消金公司下达...
朱鸿接任陈航,担任钉钉科技有限... 消费日报-今朝新闻讯 天眼查显示,6月23日,钉钉科技有限公司发生工商变更,陈航卸任法定代表人、董事...
3日累跌超20%,德创环保:公... 6月25日, 德创环保(603177.SH)公告,公司股票于2026年6月23日、6月24日和6月2...
北京发布2026年第七轮拟供商... 央广网北京6月25日消息(记者门庭婷)6月25日,北京市规划和自然资源委员会网站发布了2026年第七...
开放麦 | 启明创投胡奇:从A... “2026年,创投圈的浪潮再次翻涌:AI从技术概念走进产业深水区,硬科技创业从“小众赛道” 变成“主...
腾讯孙忠怀:在行业转身处 6月24日,2026腾讯视频年度发布在上海举行。腾讯公司副总裁、腾讯在线视频董事长孙忠怀以《在行业转...
加息,突变!美联储,重磅传来!... 美联储政策路径突生变数。 美国商务部经济分析局最新公布的数据显示,5月个人消费支出(PCE)物价指数...
6月合肥上门收金必看!5步避坑... 2026年6月,合肥黄金市场持续高位运行,不少市民翻出家里闲置的旧金饰、投资金条想变现,上门回收因为...
潮汕女富豪挂帅后加码液冷!祥鑫... 潮汕女强人,带着百亿公司加码液冷散热。 6月24日晚间,祥鑫科技(002965.SZ)公告称,公司董...
马斯克向太空要电,GobiX ... 一场关于「去哪里找电」的全球竞赛,正在朝两个方向展开。 作者|周永亮 编辑| 郑玄 「太空光伏是不是...
原料药行业陷入周期低谷 有药企... 每经记者|许立波 每经编辑|魏文艺 “过完年到现在,我们整个团队每个月都在出差,跑遍了亚非拉、欧美市...
家门口筛查白内障!永顺泽家镇暖... 大众卫生报·新湖南客户端6月25日讯(通讯员 彭雪姣)为切实解决辖区老年性白内障患者异地就医奔波、就...
终于等到!油价马上再大跌,这个... 点击添加图片描述(最多60个字) 编辑 各位车主朋友,好消息接二连三! 继6月18日油价大幅下调...
丈量出海新路 世界酒庄影响力指... 长期以来,全球酒庄评价体系由西方机构主导,且大多局限于单一酒种、单一评价维度,这一局面正逐渐被打破。...
峰瑞资本创始合伙人李丰:从资本... “2026年,创投圈的浪潮再次翻涌:AI从技术概念走进产业深水区,硬科技创业从“小众赛道” 变成“主...
原创 A... 迈向成熟,还有茁壮成长的机会。 作者 | 方璐 编辑丨于婞 来源 | 野马财经 2026年6月21日...
为企业解锁出海新通道!亚太中小... 6月24日下午,作为2026年APEC中小企业工商论坛的重要组成部分,亚太中小企业国际化合作发展论坛...
君赛生物港股IPO,增聘兴证国... 跟丰宜科技一样,正冲刺港股IPO的上海君赛生物股份有限公司(简称“君赛生物”)增聘一位整体协调人。 ...
圣邦股份明日上市:暗盘涨24%... 雷递网 雷建平 6月25日 圣邦微电子(北京)股份有限公司(简称:“圣邦股份”,股票代码:“0366...
科技“吃肉”,券商跟着“喝汤”... 当科技持续成为市场核心主线,押中硬科技项目的券商也成为被追逐的焦点。 6月24日,半导体零部件概念股...