美文网首页java学习之路spring boot
spring boot 源码解析(三)日志框架及集成使用

spring boot 源码解析(三)日志框架及集成使用

作者: 唯有努力不欺人丶 | 来源:发表于2020-12-03 22:37 被阅读0次

    前两章简单的说了下spring boot独立成jar 的原理。和spring boot的一些配置及为什么可以自动配置的原理。而今天这篇又是一个独立的知识点:日志。
    其实说起日志这个可以和Spring Boot关系不密集,哪怕我们不用Spring Boot也是要用日志的。
    往小了说记录项目的使用情况,往大了说出了问题得以调试。这是一个必不可少的东西。所以这一章会详细的讲解一下日志及日志框架。

    市场上常用的日志框架

    JUL(java.util.logging),JCL(jackarta Commons Logging),Jboss-logging,Logback,Log4j,Log4j2,slf4j(Simple Logging Facade for Java)...
    其中:JCL(jackarta Commons Logging),Jboss-logging,slf4j(Simple Logging Facade for Java)这三个是日志门面(日志的抽象层)
    JUL(java.util.logging),Logback,Log4j,Log4j2这四个是日志的实现
    我们在使用的时候一般会选择一个实现,再选择一个门面:
    下面我们一一分析:

    • Jboss-logging:这个对我们普通程序员很不友好,需要专门的框架,所以暂时这个pass
    • JCL(jackarta Commons Logging):这个虽然没啥大问题,可以使用。但是这个框架最后一次更新是2014年。。看这个时间只能说一句廉颇老矣/
    • slf4j(Simple Logging Facade for Java):所以三个门面只剩下这一个是适合使用的了。而且有个小知识:这个slf4j和logback,log4j这三个是一个人写的。
    • Log4j:写slf4j的那个人最开始的练手作品,几乎可以说是最开始的日志工具包。
    • Logback:写log4j的大佬经过一段时间的修炼,觉得log4j太垃圾了,所以直接重新写了一个。
    • JUL(java.util.logging):这个是jdk想要自己占领日志市场的跟风之作。
    • Log4j2:就是借了个名,和log4j完全莫得关系,是阿帕奇公司开发的。不管是性能还是完整性都挺好的。但是因为太好了,所以很多框架没适配。

    分析了这么多,我们的选择也出来了:slf4j和logback。
    而我们用的框架:
    Spring 框架默认是用JCL。
    Spring Boot选用的是slf4j和logback。

    Spring Boot中使用日志

    在spring boot项目中,不需要导入额外的依赖包,直接就整合了slf4j了(其实spring boot中整合了好多日志框架)。

    Spring boot中的自带的日志框架
    日志级别
    日志本身是有级别之分的。根据日志的重要性,分了五个级别,由低到高分别如下:
    trace < debug < info < warn < error
    我们可以调整输出的日志级别,日志就只会在这个级别及以上更高级别的生效。如下demo:
    ! 默认输出info级别日志
    正常来讲这五个打印都应该输出,但是事实上并不是这样,说明spring boot默认的级别就是info.不过这个级别是可调的,如下配置:
    logging.level.lsj=trace
    

    这个配置需要注意下:level后面的是自己的包名。这个配置的作用域是指定的包。
    这个日志在控制台其实看起来也不是很方便,所以日志是可以输出到指定路径的指定文件的。这里需要两个配置:

    logging.file=xxx.log #指定文件名,可以在这顺便指定文件路径
    logging.path=/xx/xx #指定路径。这个和上面的是冲突的。指定路径后会自动生成springboot默认名称的spring.log文件。
    

    需要注意的是上面的是spring 1.x版本的使用方法。而2.x以上这两个配置改名字了,变成了:

    logging.file.name
    logging.file.path
    

    使用方法还是差不多的,附上使用截图:


    日志输出到文件截图

    其实这个还有一个好处,就是可以分天记录日志,或者分周,分月都可以的。
    当然了,这个控制台和日志文件的输出格式也都是可以改的,在符合规定的情况下可以改成你想要的,如下两个配置:

    logging.pattern.console=
    logging.pattern.file=
    
    控制台输出格式改变了
    日志文件输出格式也改变了

    至于这个输出是有一定格式的,比如:

    • %d表示日期时间
    • %thread表示线程名称
    • %logger{50}表示logger名字最长50个字符。否则分割
    • %msg日志消息
    • %n 换行符
      大概就这样吧,估计这里没说全,感兴趣的自己去看文档。
      这里还有个小知识点:spring boot中的日志文件默认会自动分割,每到10m会往下版本递增,比如spring1.log。到了10mb这个1就不动了,新的写道spring2.log。再到10m自动再往下
      另外,logBack也支持自定义配置文件的。自己写个logback的xml文件,放到spring boot的类目录下,spring boot会自动读取这个配置文件而不是默认的配置文件。(这里对xml文件名字是有要求的。)
      自己配置xml文件名称要求
      敲黑板!这里又有注意点了:
      虽然我们这个图中说明了可以起的名字有挺多的,但是spring boot建议我们不要直接使用logback.xml而是使用logback-{prefile}.xml。之所以这样的原因是如果我们使用logback.xml。那么是日志框架直接读取这个配置文件,绕过了spring boot。但是如果是logback-{prefile}.xml。则会先由spring boot解析这个文件,而spring boot中那个很吊的注解springProfile:根据环境使用不同的配置就可以使用了。当然了,这个springProfile标签如果在logback.xml中出现会报错!

    本篇文章就到这里,都是一些很基础的知识和理论,可能看上去干货不多,但是其实这个有助于你能看懂日志,并作出修改。如果本篇文章稍微帮到你了记得点个喜欢点个关注。也祝大家工作顺顺利利吧!

    相关文章

      网友评论

        本文标题:spring boot 源码解析(三)日志框架及集成使用

        本文链接:https://www.haomeiwen.com/subject/jujvwktx.html