1.日志框架比较
2.默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台
配置的Logback的文件
appilcation.yml (配置简单,功能简单)
logback-spring.xml (配置复杂,功能强大)
依赖:
org.springframework.boot
spring-boot-starter-logging
spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback,所以一般不需要额外引入
日志级别
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
您还可以通过启动您的应用程序 —debug 标志来启用“调试”模式(开发的时候推荐开启),以下两种方式皆可:
在运行命令后加入—debug标志,如:$ java -jar springTest.jar —debug
在application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。
默认的命名规则,并且放在 src/main/resources下面即可
如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,application.yml可以通过logging.config属性指定自定义的名字:
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日志配置,这个功能会很有用。
一般不需要这个属性,而是直接在logback-spring.xml中使用springProfile配置,不需要logging.config指定不同环境使用不同配置文件。
xml version="1.0" encoding="UTF-8"?>
SpringBootDemo
name="LOG_PATH" value="D:\\JavaWebLogs" />
name="APPDIR" value="SpringBootDemo" />
name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
${LOG_PATH}/${APPDIR}/log_error.log
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
2MB
true
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
utf-8
class="ch.qos.logback.classic.filter.LevelFilter">
error
ACCEPT
DENY
name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
${LOG_PATH}/${APPDIR}/log_warn.log
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
2MB
true
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
utf-8
class="ch.qos.logback.classic.filter.LevelFilter">
warn
ACCEPT
DENY
name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
${LOG_PATH}/${APPDIR}/log_info.log
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
2MB
true
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
utf-8
class="ch.qos.logback.classic.filter.LevelFilter">
info
ACCEPT
DENY
name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
utf-8
class="ch.qos.logback.classic.filter.ThresholdFilter">
debug
name="org.springframework" level="WARN" />
name="org.hibernate" level="WARN" />
name="jdbc.audit" level="ERROR"/>
level="INFO">
ref="FILEERROR" />
ref="FILEWARN" />
ref="FILEINFO" />
ref="STDOUT" />
name="prod">
level="DEBUG">
ref="STDOUT"/>
name="dev">
level="DEBUG">
ref="CONSOLE"/>
3.Log4j:
修改依赖:
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
com.fasterxml.jackson.dataformat
jackson-dataformat-yaml
新增配置文件
Configuration:
status: warn
Properties: # 定义全局变量
Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:
# 测试:-Dlog.level.console=warn -Dlog.level.xjj=trace
# 生产:-Dlog.level.console=warn -Dlog.level.xjj=info
- name: log.level.console #控制台日志输出的级别
value: trace
- name: log.level.com.mars.mybatis.mapper
value: trace
- name: log.path
value: /Users/fandong/Desktop/logs #日志文件存储的位置
- name: project.name
value: Mars-DashBoard # 项目名称
Appenders:
Console: # 输出到控制台
name: CONSOLE
target: SYSTEM_OUT
ThresholdFilter:
level: ${sys:log.level.console} # “sys:”表示:如果VM参数中没指定这个变量值,则使用本文件中定义的缺省全局变量值
onMatch: ACCEPT
onMismatch: DENY
PatternLayout:
pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %20t [%50F:%3L] - %m%n"
RollingFile: # 输出到文件,超过128MB归档
- name: ROLLING_FILE
ignoreExceptions: false
fileName: ${log.path}/${project.name}.log #日志文件存储位置+文件名称
filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %20t [%50F:%3L] - %m%n"
Policies:
SizeBasedTriggeringPolicy:
size: "128 MB" #最大日志文件大小
DefaultRolloverStrategy:
max: 1000
Loggers:
Root:
level: info #日志输出级别
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
Logger: # 为 com.jeiker.demo.mapper 包配置特殊的Log级别,方便调试 SQL 语句输出
- name: log.level.com.mars.mybatis.mapper
additivity: false
level: ${sys:log.level.com.mars.mybatis.mapper}
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
使用:
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
logger.trace("I am trace log.");
logger.debug("I am debug log.");
logger.warn("I am warn log.");
logger.error("I am error log.");