您的位置:首页 > 编程语言 > Java开发

SpringBoot 使用slf4j(logback)入门

2017-09-05 15:05 405 查看

说明

在项目中都需要使用日志组件来记录和输出日志,我们通常使用的日志方式有System.out.println或log4j。

在Springboot中提供了 SLF4J(Simple Logging Facade For Java),SLF4J是一套日志接口默认使用logback日志组件,也可以自己替换为log4j等其他日志组件

由于我们计划使用默认的日志组件,因此也就不需要在额外引入什么了

准备工作

在项目的contorller包中新建类LogController.java



日志代码

编辑类代码如下

package com.gl.springbootapi.controller;

import com.gl.springbootutils.helper.CommonMethod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping("/log")
public class LogController {

private static final Logger loggerStatic = LoggerFactory.getLogger(LogController.class);//静态方式初始化Log对象
private  final Logger logger = LoggerFactory.getLogger(this.getClass());//对象方式初始化Log对象

@GetMapping("")
public String log() {
Date d = CommonMethod.getCurDate();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式

loggerStatic.info("当前时间:"+df.format(d));
logger.info("当前时间:"+df.format(d));
logger.debug("当前时间:"+df.format(d));
logger.warn("当前时间:"+df.format(d));
logger.error("当前时间:"+df.format(d));
return "当前时间:"+df.format(d);
}

}




在这里我们建立了一个controller的api来触发日志记录,具体contorller的mapping不在这里说明,在其他文章里有

代码中首先建立log对象,示例代码中建立了两种log对象,一个是静态的,一个是对象的,如果在对象方法中使用,建议使用对象方式建立,这样每个类就复制黏贴就行了,使用静态方法的,需要每个类改类名,很容易遗漏

建立好log对象之后可以记录日志

日志有4个级别,INFO、DEBUG、WARN、ERROR

可以在配置文件中定义输出级别

这样记录的日志会在控制台输出

如果希望输出到文件或数据库,可以写配置文件进行配置

配置

对于日志的配置可以直接配置到application.properties中,也可以建立logback.xml对logback进行配置,如果同时有两个配置,application.properties的优先级更高

application.properties方式配置



loggin.level指定日志级别,还可以再具体指定包的级别

logging.path指定日志路径

logging.file指定日志文件(path和file只能使用一个,file优先级高,file可以指定全路径)

logging.config指定使用的xml配置文件地址

logback.xml方式配置

在resources目录下建立文件logback.xml



内容如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址-->
<property name="LOG_HOME" value="/logs" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<!--日志异步到数据库 -->
<!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
<!--<!–日志异步到数据库 –>-->
<!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
<!--<!–连接池 –>-->
<!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
<!--<driverClass>com.mysql.jdbc.Driver</driverClass>-->
<!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>-->
<!--<user>root</user>-->
<!--<password>root</password>-->
<!--</dataSource>-->
<!--</connectionSource>-->
<!--</appender>-->
</configuration>


这样就会在磁盘根目录下建立logs文件夹,日志就存放到这里,按照规定的命名规则和大小

说明

如果想使用logback.xml方式进行配置,配置文件命名为logback.xml,Spring可以直接找到使用,如果希望定义不同环境的配置文件,例如

logback-dev.xml、logback-test.xml

则需要在application.properties添加配置

logging.config=classpath:logback-test.xml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SpringBoot slf4j