SpringBoot 默认使用 logback 作为日志框架,可在 resources 文件夹下添加 logback.xml 文件进行配置。
一个简单的示例文件内容如下
project_name %-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n logs/info.log logs/info.%i.log.zip 1 500 200MB %-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n logs/error.log logs/error.%i.log.zip 1 100 200MB %-4relative %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n ERROR ACCEPT DENY
配置文件中定义了三个输出器(appender),一个用于将日志输出到控制台,另一个用于将日志输出到名为 info.log 的文件中,另一个讲日志输出到 error.log 中。文件输出器都用了日志文件轮转策略(rolling policy),以按时间戳生成新的日志文件,并保留最近 100 个日志文件。
配置文件还定义了两个日志记录器(logger):一个用于记录名为 com.qinghuazs.blog 的应用程序的 INFO 级别日志,另一个是根日志记录器(root logger),将所有级别的日志输出到三个输出器中。
日志记录器通过 name 属性来指定日志记录器的名称,level 属性用来设置日志记录器的级别,即只输出级别高于或等于该级别的日志信息。appender-ref 元素用来引用日志输出器。
configuration 元素是 Logback 配置文件的根元素,表示整个配置文件。
configuration元素有几个重要的属性,包括debug、scan、scanPeriod和shutdownHook。
在Logback中,appender用于指定日志信息的输出方式,可以将日志信息输出到控制台、文件、数据库、远程服务等地方。每个appender定义了一组输出规则,即指定了输出的目标和输出格式等信息。
Logback中内置了多种appender类型,例如:
每个appender都有自己的配置选项,可以通过配置文件进行配置。例如,FileAppender可以通过配置文件指定日志文件的路径和文件名,RollingFileAppender可以通过配置文件指定日志文件的滚动策略和备份文件的数量。
在配置appender时,需要指定appender的类型、输出目标、输出格式等信息,name 属性用来指定日志输出器的名称,class 属性用来指定使用的具体输出器的类,encoder 元素则用来定义日志信息的格式。
%-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 用于输出相对时间,具体含义如下:
相对时间是指自应用程序启动以来经过的时间,格式为带小数点的毫秒数。%-4relative 用于将相对时间按左对齐,固定宽度为4的格式输出。%-4relative 在排版日志时可以使得时间戳对齐,易于查看日志的时序性。
log/app.log %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
/var/log/myapp.log true /var/log/myapp.%d{yyyy-MM-dd}.log 7 10MB %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
log/app.log log/app.%d{yyyy-MM-dd}.%i.log.gz 10MB 30 1GB %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
属性说明:
其他类型的Appender用的不多,如果感兴趣的话可以自行去了解。
在 logback 中,Appender Filter 是一种可以用于控制哪些日志事件可以被记录的组件。可以配置多个 Filter,每个 Filter 可以独立作用于同一个 Appender 的日志事件,只有当所有的 Filter 都允许这条日志事件才会被记录。
Appender Filter 的常用属性和用途如下:
比如,下面的配置表示只记录 level 为 ERROR 的日志事件:
ERROR ACCEPT DENY %-4relative [%thread] %-5level %logger{35} - %msg%n
还可以结合其他 Filter 来实现更复杂的逻辑,例如条件组合、正则表达式匹配等,如下示例:
message.contains("error") || level >= WARN NEUTRAL ACCEPT
level >= INFO DENY ACCEPT
第一个filter使用 JaninoEventEvaluator类,它将表达式设置为“message.contains(‘error’)|| level >= WARN”,意思是当日志消息中包含“error”或级别为WARN或更高级别时,该消息将被接受。
第二个filter使用JaninoEventEvaluator类,将表达式设置为“level >= INFO”,意思是当级别为INFO或更高级别时,该消息将被接受。
如果日志消息包含“error”或级别为WARN或更高级别,则第一个filter将接受消息,并将其传递给后续的filter和appender。如果消息不匹配第一个filter的条件,则该消息将被中立地处理。然后,如果级别为INFO或更高级别,则第二个filter将接受消息,并将其传递给appender。否则,消息将被拒绝,并不会传递给appender。
在 logback 的配置文件中,logger 元素用于配置日志记录器。一个 logger 元素包含以下几个主要属性:
这个示例配置了一个名为 com.example.myapp 的日志记录器,级别为 INFO,不向其父记录器传递日志消息。它将日志消息发送到名为 console 和 file 的两个 appender 中。
root是logback的根日志记录器,所有没有指定具体日志记录器的日志事件都会被转发到根日志记录器进行处理。在logback的配置文件中,根日志记录器通常通过元素进行配置。
根日志记录器可以设置一些通用的属性,例如输出级别(level)、Appender等,这些通用属性会被所有子日志记录器继承和应用。例如,如果将根日志记录器的输出级别设置为DEBUG,则所有子日志记录器的输出级别都将默认为DEBUG,除非它们明确指定了不同的输出级别。
在这个示例中,根日志记录器被设置为输出级别为INFO,并将一个名为CONSOLE的控制台Appender添加到其中。此外,由于没有为根日志记录器设置logger元素,因此所有日志事件都会被转发到根日志记录器进行处理,并由根日志记录器将它们输出到控制台上。
contextName是指Logback日志系统中的上下文名称,可以看作是Logback日志系统的一个实例。它是在Logback配置文件中定义的,并且是全局唯一的。
contextName在多实例的情况下非常有用,例如在一个Web应用程序中,每个Web应用程序可能需要一个自己的日志实例。这时,可以使用contextName来为每个应用程序创建不同的日志实例,将它们隔离在不同的LoggerContext中,并为每个应用程序或模块提供自己的配置。