目录
官方文档
官网文档:Logging
logback日志
logback是springboot默认使用的日志,默认级别INFO。比log4j效率更高,且实现了slf4j接口。实际日志都是在运行时binding的具体实现类。
默认情况下spring-boot-starter已经包含了logback,所以我们启动项目时没有配置日志也会正常打印日志。默认配置在org.springframework.boot.logging.logback.base.xml ,仅是简单更改的话不需要用到下边的配置文件,在application.properties或者application.yml更改相关配置就可以了。比如logging.file设置文件logging.path设置目录。
如果我们需要更改更多详细配置:可以在src/main/resources/下添加logback.xml或者logback-spring.xml(官方建议)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>logback</contextName>
<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="log.path" value="/milo/test.log" />
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>-->
<encoder>
<pattern>%clr(%d{HH:mm:ss.SSS}){red} %clr(%contextName){green} %clr([%thread]) %clr(%-5level){blue} %clr(%logger{36}){magenta} - %clr(%msg%n)</pattern>
</encoder>
</appender>
<!--输出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- logback为java中的包 -->
<!--<logger name="com.dudu.controller"/>-->
<!--logback.LogbackDemo:类的全路径 -->
<!--<logger name="com.dudu.controller.LearnController" level="WARN" additivity="true">-->
<!--<appender-ref ref="console"/>-->
<!--</logger>-->
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="dev">
<logger name="cn.milo.controllor" level="DUBUG" />
</springProfile>
<!-- 生产环境. -->
<springProfile name="prod">
<logger name="cn.milo.controllor" level="INFO" />
</springProfile>
</configuration>
具体配置大家自行查阅吧,大同小异。我的这个配置也是网上找的。
类中声明变量:
Logger logger = LoggerFactory.getLogger(SampleController.class);
logback详细介绍 : http://blog.youkuaiyun.com/gebitan505/article/details/70142155?locationNum=1&fps=1
log4j2日志
更改pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- 排除默认日志包 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加log4j包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
否则会出现slf4j绑定两个实现类的情况:
log4j2.xml 配置方法
在application.properties或者application.yml增加配置,我用的yml(如果这里是log4j2.xml或者log4j2-spring.xml可以不加下边这个配置。springboot可以识别)
logging:
config: classpath:log4j2-demo.xml #如果名字非og4j2.xml或者log4j2-spring.xml需加上这个配置。
src/main/resources/增加log4j2.xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<properties>
<!-- 文件输出格式 -->
<property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</property>
</properties>
<appenders>
<Console name="CONSOLE" target="system_out">
<PatternLayout pattern="${PATTERN}" />
</Console>
</appenders>
<loggers>
<logger name="cn.milo.controllor" level="debug" />
<root level="info">
<appenderref ref="CONSOLE" />
</root>
</loggers>
</configuration>
log4j2.yml配置方法
不需要在application.properties或者application.yml增加配置,但要增加一个依赖包
pom.xml
<!-- 加上这个才能辨认到log4j2.yml文件 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
log4j2.yml
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.xjj
value: trace
- name: log.path
value: /opt/logs
- name: project.name
value: my-spring-boot
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}:%4p %t (%F:%L) - %m%n"
RollingFile: # 输出到文件,超过128MB归档
- name: ROLLING_FILE
ignoreExceptions: false
fileName: /milo/test2.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}:%4p %t (%F:%L) - %m%n"
Policies:
SizeBasedTriggeringPolicy:
size: "128 MB"
DefaultRolloverStrategy:
max: 1000
Loggers:
Root:
level: info
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
Logger: # 为com.xjj包配置特殊的Log级别,方便调试
- name: com.xjj
additivity: false
level: ${sys:log.level.xjj}
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE