spring boot logback日志集成

前言

   项目开发中日志是比不可少的一块,通过日志能够定位和分析事故原因。目前流行日志框架包含了log4j、log4j2、logback等,另外 slf4j(Simple Logging Facade for Java则是一个日志门面框架,提供了日志系统中常用的接口,logback 和 log4j 则对slf4j 进行了实现。本文将讲述spring boot 中如何使用logback+slf4j实现日志。

简单使用

1.maven中添加spring-boot-starter-logging引用

<<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

实际开发中无需添加此依赖,spring Boot 默认的日志框架 Logback+SLF4J且spring-boot-strater默认而 添加了此依赖,而spring-boot-starter-web 包含了spring-boot-starter,所以开发中只需要引入spring-boot-starter-web组件即可.

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.默认配置

默认情况下Spring Boot将日志输出到控制台,不会写到日志文件。如果需要写入日志文件,则需在application.yml中设置logging.file属性

logging:
  level:
    com.sfw: debug
    org.springframework.jdbc.core.JdbcTemplate: debug
  file:
    name: /log/log-core.log

说明:name:日志文件的路径,level:日志级别。

3.日志使用

  阿里编码规范中明确说明:应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

  具体实现如下:

  1. 编写日志门面类

public class Log
{
    private Logger logger;

    public Log(Logger logger)
    {
        this.logger = logger;
    }

    public boolean isDebugEnabled()
    {
        return logger.isDebugEnabled();
    }

    public void debug(String message)
    {
        this.logger.debug(message);
    }

    public void debug(String message, Object... params)
    {
        this.logger.debug(message, params);
    }

    public void debug(String message, Throwable t)
    {
        this.logger.debug(message, t);
    }

    public void info(String message)
    {
        this.logger.info(message);
    }

    public void info(String message, Object... params)
    {
        this.logger.info(message, params);
    }
    
    public void warn(String message, Object... params)
    {
        this.logger.warn(message, params);
    }

    public void info(String message, Throwable t)
    {
        this.logger.info(message, t);
    }

    public void error(Throwable t)
    {
        this.logger.error(null, t);
    }

    public void error(String message)
    {
        this.logger.error(message);
    }

    public void error(String message, Object... params)
    {
        this.logger.error(message, params);
    }

    public void error(String message, Throwable t)
    {
        this.logger.error(message, t);
    }
}

2.日志工厂类,通过工厂获取日志实例

public class LogManager
{
    public static Log getLogger(Class<?> clazz)
    {
        Logger logger = LoggerFactory.getLogger(clazz);
        return new Log(logger);
    }
    
    public static Log getLogger(String name)
    {
        Logger logger = LoggerFactory.getLogger(name);
        return new Log(logger);
    }
}

 3.具体使用

public static Log logger = LogManager.getLogger(ExceptionHandler.class);

logger.inf0("this is info logger"); //记录info级别日志
logger.debug("this is info logger");//记录debug级别日志
logger.error("this is info logger");//记录error级别日志

String str="ac";
logger.error("this is info logger param [{}]",str);//通过占位符输出变量

附加内容

可能很多人对这种写法会有疑虑,直接在类中使用API调用不更简单吗?

   相信大家都知道,前段时间因为log4j爆发的漏洞,导致了很多员工都通宵加班紧急修复此问题,  如果直接采用Api方式编写日志,那么修改此问题工作量非常巨大。采用门面日志的方式,子需要在工厂类中将日志的实现由log4j替换为其他日志实现即可。

日志使用和打印在项目中是非常重用的一部分,通过日志我们能够分析和定位问题的原因,通过日志分析我们能够清楚的知道用户的相关操作行为。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值