《logback官网》
各种指导文件,有空自己去看,比如:我们需要调整的是布局,直接看Layouts。
pom.xml
<!-- 环境配置 --><profiles><profile><id>dev</id><properties><spring.profiles.active>dev</spring.profiles.active></properties><activation><!-- 设为默认开启 --><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><spring.profiles.active>test</spring.profiles.active></properties></profile><profile><id>prod</id><properties><spring.profiles.active>prod</spring.profiles.active></properties></profile></profiles>
需要注意的事项:
- SpringBoot默认的root级别是INFO,因此不需要DEBUG级别的日志,除非你想看SpringBoot的某些详细内容或者执行过程。
- 虽然可以通过配置文件配置生成日志输出到文件,但是即使你区分了环境,使用了某个环境并且只输出到控制台不输出到文件,还是会生成对应的日志文件。(只配置了输出到控制台,则不会生成文件)
- %L是一个转换符号,用于输出调用日志记录器的日志语句所在的代码行号。当使用%L时,会动态获取当前日志语句的代码行号,并将其作为日志消息的一部分进行输出。然而,使用%L会对性能产生一定的影响,尤其是在频繁记录大量日志消息的情况下。这是因为获取代码行号需要进行一些额外的操作,涉及到Java中的反射机制和堆栈跟踪的解析,这些操作会带来额外的开销。具体的性能影响取决于系统的复杂性、日志记录的频率和日志消息的大小。在性能敏感的生产环境中,建议在配置中避免使用%L,以减少不必要的性能损耗。你可以通过设置日志级别、打印线程名称等其他调试信息来辅助定位日志输出位置,而不必使用%L获取行号。总结起来,使用%L可以方便地输出代码行号,但会对性能产生一定的影响。在生产环境中,尽量避免频繁使用%L,以避免不必要的性能损耗。
简单配置
<?xml version="1.0" encoding="UTF-8"?><!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --><!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --><!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --><!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --><configurationscan="true"scanPeriod="60 seconds"debug="false"><contextName>logback</contextName><!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量--><propertyname="log.path"value="./log"/><!-- 彩色日志插件 --><conversionRuleconversionWord="clr"converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRuleconversionWord="wEx"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><!-- 控制台彩色日志格式,注意:%L打印行号对性能有影响,因此不建议在生产环境使用。 --><propertyname="CONSOLE_LOG_PATTERN"value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/><!-- 输出到文件日志格式 --><propertyname="FILE_LOG_PATTERN"value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/><!--输出到控制台--><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><level>debug</level></filter><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><!-- 设置字符集 --><charset>UTF-8</charset></encoder></appender><!-- 时间滚动输出 level为 INFO 日志 --><appendername="INFO_FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/log_info.log</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>50GB</totalSizeCap></rollingPolicy><!--
此日志文件只记录debug级别的
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的
--><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>info</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 WARN 日志 --><appendername="WARN_FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/log_warn.log</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>20GB</totalSizeCap></rollingPolicy><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>warn</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 ERROR 日志 --><appendername="ERROR_FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/log_error.log</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>50GB</totalSizeCap></rollingPolicy><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--root配置必须在appender下边,root日志级别比appender高,如果:root是ERROR,appender是INFO,那么就是ERROR--><!-- spring.profiles.active选择那个环境 --><!-- 开发环境 --><springProfilename="dev"><rootlevel="INFO"><appender-refref="STDOUT"/></root></springProfile><!-- 生产环境 --><springProfilename="prod"><rootlevel="ERROR"><appender-refref="ERROR_FILE"/></root></springProfile><!-- 测试环境 --><springProfilename="test"><rootlevel="INFO"><appender-refref="STDOUT"/><appender-refref="INFO_FILE"/><appender-refref="ERROR_FILE"/><appender-refref="WARN_FILE"/></root></springProfile></configuration>
多环境配置
把原来resources下的logback-spring.xml删除,新增logback文件夹和对应环境的logback xml配置文件
application.yml
spring:application:name:'@artifactId@'profiles:#环境active:'@spring.profiles.active@'logging:config: classpath:logback/@[email protected]
开发环境
application-dev.yml
logging:level:# 正式环境打印SQL日志(一般没什么问题不建议开启。)com.fu.easycode.mapper: debug
生产环境
application-prod.yml
#按需配置
测试环境
application-test.yml
logging:level:# 正式环境打印SQL日志(一般没什么问题不建议开启。)com.fu.easycode.mapper: debug
resources/logback/dev.xml
<?xml version="1.0" encoding="UTF-8"?><configurationscan="true"scanPeriod="60 seconds"debug="false"><conversionRuleconversionWord="clr"converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRuleconversionWord="wEx"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><!-- 控制台彩色日志格式,注意:%L打印行号对性能有影响,因此不建议在生产环境使用。 --><propertyname="CONSOLE_LOG_PATTERN"value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/><!--输出到控制台--><appendername="CONSOLE"class="ch.qos.logback.core.ConsoleAppender"><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"charset="UTF-8"><!-- 输出到控制台的日志格式 --><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder></appender><rootlevel="INFO"><appender-refref="CONSOLE"/></root></configuration>
resources/logback/prod.xml
<?xml version="1.0" encoding="UTF-8"?><configurationscan="true"scanPeriod="60 seconds"debug="false"><!-- 应用名称 --><springPropertyscope="context"name="springApplicationName"source="spring.application.name"defaultValue="spring"/><!-- 环境 --><springPropertyscope="context"name="springProfilesActive"source="spring.profiles.active"defaultValue="prod"/><!-- 重启后是否删除日志 --><springPropertyscope="context"name="cleanHistoryOnStart"source="logging.logback.rollingpolicy.clean-history-on-start"defaultValue="false"/><!-- 单个日志文件的大小 --><springPropertyscope="context"name="maxFileSize"source="logging.logback.rollingpolicy.max-file-size"defaultValue="10MB"/><!-- 日志总文件最大值 --><springPropertyscope="context"name="totalSizeCap"source="logging.logback.rollingpolicy.total-size-cap"defaultValue="50GB"/><!-- 日志保留时长 (天) --><springPropertyscope="context"name="maxHistory"source="logging.logback.rollingpolicy.max-history"defaultValue="30"/><!-- 日志文件路径 --><springPropertyscope="context"name="path"source="logging.file.path"defaultValue="./log/${springApplicationName}/${springProfilesActive}"/><contextName>${springApplicationName}</contextName><propertyname="PATTERN_FILE"value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/><appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${path}/%d{yyyy-MM-dd}/%i.log</fileNamePattern><totalSizeCap>${totalSizeCap}</totalSizeCap><maxHistory>${maxHistory}</maxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${maxFileSize}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!-- 重启项目后删除日志 --><cleanHistoryOnStart>${cleanHistoryOnStart}</cleanHistoryOnStart></rollingPolicy><encoder><pattern>${PATTERN_FILE}</pattern></encoder></appender><rootlevel="ERROR"><appender-refref="FILE"/></root></configuration>
resources/logback/test.xml
<?xml version="1.0" encoding="UTF-8"?><configurationscan="true"scanPeriod="60 seconds"debug="false"><!-- 应用名称 --><springPropertyscope="context"name="springApplicationName"source="spring.application.name"defaultValue="spring"/><!-- 环境 --><springPropertyscope="context"name="springProfilesActive"source="spring.profiles.active"defaultValue="prod"/><!-- 重启后是否删除日志 --><springPropertyscope="context"name="cleanHistoryOnStart"source="logging.logback.rollingpolicy.clean-history-on-start"defaultValue="false"/><!-- 单个日志文件的大小 --><springPropertyscope="context"name="maxFileSize"source="logging.logback.rollingpolicy.max-file-size"defaultValue="10MB"/><!-- 日志总文件最大值 --><springPropertyscope="context"name="totalSizeCap"source="logging.logback.rollingpolicy.total-size-cap"defaultValue="50GB"/><!-- 日志保留时长 (天) --><springPropertyscope="context"name="maxHistory"source="logging.logback.rollingpolicy.max-history"defaultValue="30"/><!-- 日志文件路径 --><springPropertyscope="context"name="path"source="logging.file.path"defaultValue="./log/${springApplicationName}/${springProfilesActive}"/><contextName>${springApplicationName}</contextName><!-- 彩色日志插件 --><conversionRuleconversionWord="clr"converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRuleconversionWord="wEx"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><!-- 控制台彩色日志格式,注意:%L打印行号对性能有影响,因此不建议在生产环境使用。 --><propertyname="CONSOLE_LOG_PATTERN"value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/><!-- 输出到文件日志格式 --><propertyname="PATTERN_FILE"value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/><!--输出到控制台--><appendername="CONSOLE"class="ch.qos.logback.core.ConsoleAppender"><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"charset="UTF-8"><!-- 输出到控制台的日志格式 --><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder></appender><appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${path}/%d{yyyy-MM-dd}/%i.log</fileNamePattern><totalSizeCap>${totalSizeCap}</totalSizeCap><maxHistory>${maxHistory}</maxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${maxFileSize}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!-- 重启项目后删除日志 --><cleanHistoryOnStart>${cleanHistoryOnStart}</cleanHistoryOnStart></rollingPolicy><encoder><pattern>${PATTERN_FILE}</pattern></encoder></appender><rootlevel="INFO"><appender-refref="CONSOLE"/><appender-refref="FILE"/></root></configuration>
总结
建议用第二种方式,虽然麻烦点,但是对不同环境,做了不同的区分。方便阅读。因为springProperty可以和application的配置一起使用,再application里配置了,就可以覆盖掉xml里的默认配置。
彩色日志格式
<propertyname="CONSOLE_LOG_PATTERN"value="[%yellow(%d{HH:mm:ss}) %clr(%p) %boldBlue(%.10t)] %clr(%C{39}){cyan} %boldMagenta(%M): %m%n%wEx"/>
版权归原作者 Meta39 所有, 如有侵权,请联系我们删除。