在Spring Boot中,您可以使用Logback为不同的类配置不同的日志文件。以下是一个基本的 logback.xml
配置示例,展示了如何为两个类 com.example.Class1
和 com.example.Class2
配置不同的日志文件。
<configuration>
<appender name="CLASS1_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/class1.logfile>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
<appender name="CLASS2_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/class2.logfile>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
<logger name="com.example.Class1" level="info" additivity="false">
<appender-ref ref="CLASS1_FILE" />
logger>
<logger name="com.example.Class2" level="info" additivity="false">
<appender-ref ref="CLASS2_FILE" />
logger>
<root level="error">
<appender-ref ref="CLASS1_FILE" />
<appender-ref ref="CLASS2_FILE" />
root>
configuration>
这个配置定义了两个 appender,分别命名为 “CLASS1_FILE” 和 “CLASS2_FILE”。每个appender会将日志输出到指定的文件中,这里分别是 logs/class1.log
和 logs/class2.log
。
然后,定义了两个 logger,分别对应 com.example.Class1
和 com.example.Class2
类。这两个 logger 的日志级别都设置为 “info”,并将日志输出到对应的 appender 中。additivity="false"
的设置是为了防止日志被父 logger(在这里是 root logger)也处理。
最后,root logger 设置为只处理 “error” 级别以上的日志,它的日志输出到两个 appender 中。
以上配置示例可以根据你的具体需求进行调整,例如你可以修改日志级别、日志模式、日志文件的路径等。
标签
标签在Logback配置文件中定义了日志输出的目的地和格式。换句话说,它确定了日志消息的输出方式和地点。例如,这可能是一个文件,一个数据库,一个控制台窗口等等。
每个
标签包含以下主要部分:
name
属性:此属性定义了appender的名称,你可以随意命名,但需要确保在配置文件中唯一。class
属性:此属性定义了appender的类型。例如,ch.qos.logback.core.ConsoleAppender
是将日志发送到控制台,ch.qos.logback.core.rolling.RollingFileAppender
是将日志发送到文件,并提供滚动特性。
或
:这些标签定义了日志输出的格式。PatternLayoutEncoder
或 PatternLayout
可以让你自定义日志的格式。举个例子:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
在这个例子中,名为 “STDOUT” 的appender是 ConsoleAppender
类型,这意味着它将日志输出到控制台。
标签定义了日志的输出格式。%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
表示日志包含时间戳、线程名、日志级别、logger名和消息内容。
标签在Logback配置文件中定义了一个logger实例,这个实例会拦截、处理日志消息,并将日志传递到适当的appender中进行记录。
每个
标签通常包含以下部分:
name
属性:此属性定义了logger的名称,通常与你想要记录日志的类或包的名称匹配。例如,如果你有一个名为 com.example.MyClass
的类,并且你想要特别记录这个类的日志,那么你可以创建一个名称为 com.example.MyClass
的logger。level
属性:此属性定义了该logger接受的最低日志级别。可选的级别有 TRACE, DEBUG, INFO, WARN, ERROR, OFF。例如,如果设置为INFO,那么该logger将只记录INFO、WARN、ERROR级别的日志。additivity
属性:此属性决定日志是否应传递给父logger进行处理。如果设为 false
,则日志仅由此logger处理,不会被传递到父logger;如果设为 true
或不设置,日志既由此logger处理,也会被传递到父logger。
:此标签用于将logger与appender关联起来。appender的引用名称必须与之前定义的appender的名称匹配。例如:
<logger name="com.example.MyClass" level="info" additivity="false">
<appender-ref ref="STDOUT" />
logger>
这个示例定义了一个名为 com.example.MyClass
的logger,其日志级别设置为 info
,并且不会把日志传递给父logger。日志将被发送到名为 STDOUT
的appender中进行处理。
<configuration debug="false">
<shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
<property name="LOG_HOME" value="E:/code/logs/springboot_temple" />
<property name="LOG_NAME_BEGIN" value="springboot_temple" />
<property name="moduleName" value="springboot-temple" />
<property name="maxFileSize" value="100MB" />
<property name="totalSizeCap" value="2GB" />
<property name="MaxHistory" value="30" />
<property name="COLOUR_LOG_PATTERN"
value="%magenta(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([TRACE_ID:%X{TRACE_ID}]) %blue([%thread]) %highlight(%-5level) %green(%logger) - %msg%n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${COLOUR_LOG_PATTERN}pattern>-->
<charset>utf8charset>
encoder>
appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-all-%d{yyyy-MM-dd}_%i.logfileNamePattern>
<maxFileSize>${maxFileSize}maxFileSize>
<totalSizeCap>${totalSizeCap}totalSizeCap>
<MaxHistory>${MaxHistory}MaxHistory>
rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${COLOUR_LOG_PATTERN}pattern>
encoder>
appender>
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-info-%d{yyyy-MM-dd}_%i.logfileNamePattern>
<maxFileSize>${maxFileSize}maxFileSize>
<totalSizeCap>${totalSizeCap}totalSizeCap>
<MaxHistory>${MaxHistory}MaxHistory>
rollingPolicy>
<encoder>
<pattern>${COLOUR_LOG_PATTERN}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFOlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-debug-%d{yyyy-MM-dd}_%i.logfileNamePattern>
<maxFileSize>${maxFileSize}maxFileSize>
<totalSizeCap>${totalSizeCap}totalSizeCap>
<MaxHistory>${MaxHistory}MaxHistory>
rollingPolicy>
<encoder>
<pattern>${COLOUR_LOG_PATTERN}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUGlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-error-%d{yyyy-MM-dd}_%i.logfileNamePattern>
<maxFileSize>${maxFileSize}maxFileSize>
<totalSizeCap>${totalSizeCap}totalSizeCap>
<MaxHistory>${MaxHistory}MaxHistory>
rollingPolicy>
<encoder>
<pattern>${COLOUR_LOG_PATTERN}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERRORlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-warn-%d{yyyy-MM-dd}_%i.logfileNamePattern>
<maxFileSize>${maxFileSize}maxFileSize>
<totalSizeCap>${totalSizeCap}totalSizeCap>
<MaxHistory>${MaxHistory}MaxHistory>
rollingPolicy>
<encoder>
<pattern>${COLOUR_LOG_PATTERN}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARNlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="CLASS1_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-class1-%d{yyyy-MM-dd}_%i.logfileNamePattern>
<maxFileSize>${maxFileSize}maxFileSize>
<totalSizeCap>${totalSizeCap}totalSizeCap>
<MaxHistory>${MaxHistory}MaxHistory>
rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${COLOUR_LOG_PATTERN}pattern>
encoder>
appender>
<appender name="CLASS2_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-class2-%d{yyyy-MM-dd}_%i.logfileNamePattern>
<maxFileSize>${maxFileSize}maxFileSize>
<totalSizeCap>${totalSizeCap}totalSizeCap>
<MaxHistory>${MaxHistory}MaxHistory>
rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${COLOUR_LOG_PATTERN}pattern>
encoder>
appender>
<logger name="com.example.demo_wwxx_dep.service.ClassLog1" level="info" additivity="true">
<appender-ref ref="CLASS1_FILE" />
logger>
<logger name="com.example.demo_wwxx_dep.service.ClassLog2" level="info" additivity="false">
<appender-ref ref="CLASS2_FILE" />
logger>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="ERROR" />
<appender-ref ref="DEBUG" />
<appender-ref ref="INFO" />
<appender-ref ref="WARN" />
root>
configuration>