springboot整合常用组件和服务【8】springboot支持log

日志在系统中起着回溯运行历史的重要作用,现在java日志当中有两大阵营,分别是Commons Logging和Slf4j,Log4j/Log4j2和Logback分别是其的实现。Spring Boot默认使用的是Slf4j+Logback组合,本文将阐述如何在springboot中使用Logback日志模块。

1、环境约束

  • win10 64位操作系统
  • idea2018.1.5
  • maven-3.0.5
  • jdk-8u162-windows-x64

2、前提约束

  • 完成springboot创建web项目 https://www.jianshu.com/p/de979f53ad80
    注意:笔者创建项目的时候约束的包前缀是net.wanho.springboot.logdemo,读者可以自行创建包名,只是要注意本文中的代码也要修改包名。

3、配置logback

  • 添加依赖
    logback相关jar包在创建springboot web项目之时便已经被依赖,如下图

     

    logback已经被依赖

  • 在主启动类同等目录下创建UserService.java【注意:这里没有定义service包,读者可以自行选择创建与否】
package net.wanho.springboot.logdemo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private Logger logger = LoggerFactory.getLogger(UserService.class);

    public String test()
    {
        logger.debug("debug");
        logger.error("error");
        return "userservice.test()";
    }
}
  • 在主启动类同等目录下创建UserController.java【注意:这里没有定义controller包,读者可以自行选择创建与否】
package net.wanho.springboot.logdemo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {

    @RequestMapping("/test")
    @ResponseBody
    public String test()
    {
        return "success";
    }
}
  • 在src/main/resources当中新建logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>
    <!--定义日志打印路径-->
    <property name="log.path" value="D:/logback.log"/>
    <!--日志打印到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--ConsoleAppender中的日志打印格式-->
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %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>
    <!--打印日志的级别,以及引用appender-->
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

    <!--name可以是包名,也可以具体到某各类,在上述root约束之外的特别定义,不继承root以及其他logger定义 -->
    <logger name="net.wanho.springboot.logdemo" level="DEBUG" additivity="false">
        <!--net.wanho.springboot.logdemo路径下所有的日志打印到文件-->
        <appender-ref ref="file"/>
    </logger>
    <!--name可以是包名,也可以具体到某各类,在上述root约束之外的特别定义,不继承root以及其他logger定义 -->
    <logger name="net.wanho.springboot.logdemo.UserService" level="WARN" additivity="false">
        <!--UserService类打印的日志到控制台-->
        <appender-ref ref="console"/>
    </logger>
</configuration>
  • 修改application.properties
#引用日志配置文件
logging.config=classpath:static/logback-spring.xml

4、启动测试
启动之后,在浏览器中输入http://localhost:8080/test,查看控制台的日志及文件中的日志。

  • 分析
    (1)在命令行中,除了系统日志以外,我们自己代码打印日志如下【注意:在最后一行】:
16:18:25.104 logback [http-nio-8080-exec-1] ERROR n.w.springboot.logdemo.UserService - error

根据我们日志配置文件的约束:

    <!--name可以是包名,也可以具体到某各类,在上述root约束之外的特别定义,不继承root以及其他logger定义 -->
    <logger name="net.wanho.springboot.logdemo.UserService" level="WARN" additivity="false">
        <!--UserService类打印的日志到控制台-->
        <appender-ref ref="console"/>
    </logger>

UserService类中打印的日志只在命令行显示,且只显示warn级别及其以后的,因此命令行只显示error日志。
(2)在日志文件中,除了系统日志以外,我们自己代码打印日志如下【注意:在最后一行】:

16:26:49.249 logback [http-nio-8080-exec-2] DEBUG n.w.s.logdemo.UserController - debug
16:26:49.250 logback [http-nio-8080-exec-2] ERROR n.w.s.logdemo.UserController - error

根据我们日志配置文件的约束:

    <!--name可以是包名,也可以具体到某各类,在上述root约束之外的特别定义,不继承root以及其他logger定义 -->
    <logger name="net.wanho.springboot.logdemo" level="DEBUG" additivity="false">
        <!--net.wanho.springboot.logdemo路径下所有的日志打印到文件-->
        <appender-ref ref="file"/>
    </logger>

net.wanho.springboot.logdemo包下面所有的类只在文件中显示,且显示debug级别及其以后的,因此文件中既有debug也有error日志。

至此,我们完成了springboot中的日志使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值