柯基笔记:Log日志配置

  • 作者:柯基大佬
  • 日期:2021-10-20
  • 类型:Java
  • 说明:本文源于 柯基 手写摘要,如需转载请带上链接或注明出处!

Log日志配置

均在application-dev.properties配置

一、springboot自带的

日志打印

# 执行sql打印开关
logging.level.com.a2j.mapper.*=debug

日志备份

# 存放的文件名
logging.file.name=logs/a2j.log
# 打印格式
logging.pattern.console=%d %-5level %logger : %msg%n
logging.pattern.file=%d %-5level [%thread] %logger : %msg%n

二、springboot + Logback

dev和prod最大的区别就是,文件存放路径的配置

  • dev环境

1.在resources下新建log/logback-dev.xml

2.在application-dev.properties中配置

# log打印开关
logging.level.com.a2j.mapper.*=debug
# 日志配置
logging.config=classpath:log/logback-dev.xml

logback-dev.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 项目名称 -->
<property name="PROJECT_NAME" value="a2j-java"/>
<!-- 定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<property name="LOG_HOME" value="/Users/apple/Desktop/Project/java_logs"/>
<!-- 日志文件保留最大天数 -->
<property name="MAX_HISTORY" value="365"/>
<!-- 日志文件最大的大小 -->
<property name="MAX_FILESIZE" value="100MB"/>
<!-- 编码 -->
<property name="CHARSET" value="UTF-8"/>

<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- ERROR日志文件,记录错误日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${PROJECT_NAME}/error.log</file>
<!-- 过滤器,只打印ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 日志级别 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/error.%i.zip</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!-- 日志文件最大的大小 -->
<MaxFileSize>${MAX_FILESIZE}</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- INFO日志文件,用于记录重要日志信息 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${PROJECT_NAME}/info.log</file>
<!-- 过滤器,只打印INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/info.%i.zip</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!-- 日志文件最大的大小 -->
<MaxFileSize>${MAX_FILESIZE}</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- SQL日志文件,用于执行日志信息 -->
<appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${PROJECT_NAME}/sql.log</file>
<!-- 过滤器,只打印INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/sql.%i.zip</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!-- 日志文件最大的大小 -->
<MaxFileSize>${MAX_FILESIZE}</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- 输出error信息到文件-->
<logger name="error" additivity="true">
<appender-ref ref="ERROR_FILE"/>
</logger>

<!-- 输出info信息到文件-->
<logger name="info" additivity="true">
<appender-ref ref="INFO_FILE"/>
</logger>

<!-- 输出sql信息到文件 -->
<logger name="com.a2j.mapper.*" additivity="true">
<appender-ref ref="SQL_FILE"/>
</logger>

<!-- 环境配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="SQL_FILE"/>
</root>
</configuration>
  • prod

1.在resources下新建log/logback-prod.xml

2.在application-dev.properties中配置

logback-prod.xml如下:

# log打印开关
logging.level.com.a2j.mapper.*=debug
# 日志配置
logging.config=classpath:log/logback-dev.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 项目名称 -->
<property name="PROJECT_NAME" value="a2j-java"/>
<!-- 定义日志文件的存储地址 Linux服务器中使用绝对路径!!!!!!!!!!!! -->
<property name="LOG_HOME" value="/usr/local/a2j-logs"/>
<!-- 日志文件保留最大天数 -->
<property name="MAX_HISTORY" value="365"/>
<!-- 日志文件最大的大小 -->
<property name="MAX_FILESIZE" value="100MB"/>
<!-- 编码 -->
<property name="CHARSET" value="UTF-8"/>

<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- ERROR日志文件,记录错误日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${PROJECT_NAME}/error.log</file>
<!-- 过滤器,只打印ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 日志级别 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/error.%i.zip</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!-- 日志文件最大的大小 -->
<MaxFileSize>${MAX_FILESIZE}</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- INFO日志文件,用于记录重要日志信息 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${PROJECT_NAME}/info.log</file>
<!-- 过滤器,只打印INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/info.%i.zip</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!-- 日志文件最大的大小 -->
<MaxFileSize>${MAX_FILESIZE}</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- SQL日志文件,用于执行日志信息 -->
<appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${PROJECT_NAME}/sql.log</file>
<!-- 过滤器,只打印INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/sql.%i.zip</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!-- 日志文件最大的大小 -->
<MaxFileSize>${MAX_FILESIZE}</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
<charset>${CHARSET}</charset>
</encoder>
</appender>

<!-- 输出error信息到文件-->
<logger name="error" additivity="true">
<appender-ref ref="ERROR_FILE"/>
</logger>

<!-- 输出info信息到文件-->
<logger name="info" additivity="true">
<appender-ref ref="INFO_FILE"/>
</logger>

<!-- 输出sql信息到文件 -->
<logger name="com.a2j.*.mapper.*" additivity="true">
<appender-ref ref="SQL_FILE"/>
</logger>

<!-- 环境配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="SQL_FILE"/>
</root>
</configuration>