180623-SpringBoot之logback配置文件

180623-SpringBoot之logback配置文件_第1张图片
logo

SpringBoot配置logback

项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?

I. 配置说明

在resource目录下,新建一个日志文件: logback-spring.xml,内容如下



    
    
    
    
        
            %d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n
            
            UTF-8
        
    

    
        
        
            ERROR
        
    

    
    
    
    
        
        
            INFO
        
        logs/story.log
        
        
        
            
            
            logs/arch/story.%d.%i.log
            
            3
            
                
                10MB
            
        
        
            
            
                %d %p (%file:%line\)- %m%n
            
            
            UTF-8
        
    

    
    
    
    
        
        
        
    

    
        
        
        
    

    
    
        
    

上面是一个基础的日志输出配置,额外说明几点:

  • 配置文件名能否是其他的
  • appender标签中对日志级别进行过滤
  • 一个logger标签下有多个appender-ref
  • 自定义的appender实现类

II. 扩展

1. 配置文件名

配置文件名默认为 logback-spring.xml,如果我希望改成 mylog.xml 可以怎么办?

主要是修改 application.yml 配置文件中的参数指定

logging:
  config: classpath:mylog.xml

2. logger标签

logger标签下可以接上多个, 即表示命中的日志,会采用这多个appender,都打印一遍,比如上面的,来一条日志,在控制台会输出,在日志文件会输出,如果是error日志,还会触发ServiceAlarm的逻辑

因此就有一个问题,我们可能希望不同的内部有个日志级别的控制,比如控制台可以输出debug日志,而日志文件中只输出info级别的,这就需要在appender标签内添加filter属性了


    
    
        WARN
    

3. 自定义appender实现类

前面的配置文件中,使用了一个自定义的 AlarmService, 主要是在接收到错误日志时,实现自定义报警,对应的简单实现如下

/**
 * 报警
 * Created by @author yihui in 16:43 18/6/23.
 */
public class ServiceAlarm extends AppenderBase {
    private static final long INTERVAL = 10 * 1000 * 60;
    private long lastAlarmTime = 0;

    @Override
    protected void append(ILoggingEvent iLoggingEvent) {
        if (canAlarm()) {
            doAlarm(iLoggingEvent.getFormattedMessage());
        }
    }

    private boolean canAlarm() {
        long now = System.currentTimeMillis();
        if (now - lastAlarmTime >= INTERVAL) {
            lastAlarmTime = now;
            return true;
        } else {
            return false;
        }
    }

    private void doAlarm(String content) {
        try {
            EmailWrapper.sendMail("异常报警", "[email protected]", content);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 其他

关于logback的配置文件中的详细参数,可以参考博文:

  • Logback 简明使用手册

III. 其他

1. 一灰灰Blog: https://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

  • 微博地址: 小灰灰Blog
  • QQ: 一灰灰/3302797840

3. 扫描关注

blogInfoV2.png

你可能感兴趣的:(180623-SpringBoot之logback配置文件)