JAVAlogback日志管理详解

 更新时间:2021年09月01日 10:51:21   作者:软件老王  
本篇文章主要介绍了在SpringBoot中使用Logback管理记录日志,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

1、问题描述

关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。

2、解决方案

这次其实是碰到了一个问题,一般的情况是,会单独在linux上创建个用户,线上和开发环境一样,这样脚本中假如有相对目录的话,也能保持一致,但是这次因为线上环境创建其他用户有问题,只能用root用户操作,导致logback定义的目录,开发和线上不一致,线上是root/***,开发环境没有权限访问该目录(开发环境使用的普通用户),所以logback的目录,需要配置化,但是无法从application中获取,换了个方式解决的,记录下。

2.1 配置

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <springProperty scope="context" name="LOG_HOME" source="path.log"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <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}/laowangtest.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>1kb</MaxFileSize>
<!--                <MaxFileSize>5MB</MaxFileSize>- -->
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

简要说明

1、目录配置化

 <springProperty scope="context" name="LOG_HOME" source="path.log"/>

其中application.yml中配置是这样的:

path:
  log: e:/laowang/test

实际项目中还有另外的配置文件:application-dev.yml、application-test.yml、application-prod.yml,path.log是配置在每个文件中,每个里面的值不一样,而不是配置在公共配置application.yml中,这样根据打包规则就能获取不同的日志目录了。

另外至于为什么无法通过 方 式 获 取 值 , 网 上 或 者 官 方 给 的 答 案 是 , 在 容 器 中 , l o g b a c k 先 与 a p p l i c a t i o n . y m l 加 载 了 , 所 以 通 过 {}方式获取值,网上或者官方给的答案是,在容器中,logback先与application.yml加载了,所以通过 方式获取值,网上或者官方给的答案是,在容器中,logback先与application.yml加载了,所以通过{}方式就拿不到值了;同时保险起见,将logback.xml文件名称更改为logback-***.xml,例如:logback-spring.xml。

2、简单介绍下目前的配置

配置了两个Appender,一个打印到控制台,一个是到文件,以前把文件按照info、warn、errro,根据日志级别区分了打印文件,现在感觉没必要,就打印一个里面去,还按照以前方式滚动,首先按天,其次按大小滚动日志

   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/laowangtest.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>1kb</MaxFileSize>
<!--                <MaxFileSize>5MB</MaxFileSize>- -->
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

其中几个参数:

(1)FileNamePattern,文件目录;

(2)MaxHistory:日志保留天数;

(3)MaxFileSize:多大开始滚动(新增)日志,记得是5MB,后面还有B不要漏掉了。

2.2 效果

为了展示效果,把大小给成1kb滚动,弄个测试方法进行验证

(1)测试方法

@Api(value = "test")
@RestController
public class TestController {
    Logger logger = LoggerFactory.getLogger(TestController. class);

    @RequestMapping(value ="/logTest")
    @ResponseBody
    public  String logTest() {
        logger.info("老王是帅哥老王是帅哥老王是帅哥");
        return "老王是帅哥!";
    }
}

(2)执行效果

浏览器:

生成文件:

文件内容:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • SpringBoot集成jjwt和使用方式

    SpringBoot集成jjwt和使用方式

    本文详细介绍了JWT依赖(以jjwt为例)的引入和使用方法,首先,需要在项目中引入jwt依赖,随后在Spring的启动类application.yml中进行相应配置,最后,提供了一份完整的jwt工具类代码,供读者直接使用,以上内容便是作者的个人经验分享,期望能为读者提供参考并得到支持
    2024-10-10
  • Java数据长度获取方式对比之length属性、length()和size()方法详解

    Java数据长度获取方式对比之length属性、length()和size()方法详解

    在Java编程语言中length、length()和size()是三个常见的用来获取不同数据类型对象长度或大小的方法,但它们各自适用于不同的上下文,这篇文章主要给大家介绍了关于Java数据长度获取方式对比之length属性、length()和size()方法详解
    2024-07-07
  • Json转化为Java对象的实例详解

    Json转化为Java对象的实例详解

    这篇文章主要介绍了Json转化为Java对象的实例详解的相关资料,前后端数据交互的情况经常会遇到Json串与java 对象的相互转换方便操作,需要的朋友可以参考下
    2017-08-08
  • 浅谈java线程状态与线程安全解析

    浅谈java线程状态与线程安全解析

    本文主要介绍了浅谈java线程状态与线程安全解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Java synchronized重量级锁实现过程浅析

    Java synchronized重量级锁实现过程浅析

    这篇文章主要介绍了Java synchronized重量级锁实现过程,synchronized是Java里的一个关键字,起到的一个效果是"监视器锁",它的功能就是保证操作的原子性,同时禁止指令重排序和保证内存的可见性
    2023-02-02
  • java调用Hbase报错解决方法

    java调用Hbase报错解决方法

    这篇文章主要为大家介绍了java调用Hbase报错解决方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Mybatis RowBounds 限制查询条数的实现代码

    Mybatis RowBounds 限制查询条数的实现代码

    Oracle 数据库查询增加RowBounds限制查询条数,默认是0到1000条。下面给大家分享Mybatis RowBounds 限制查询条数的实现代码,需要的朋友参考下吧
    2016-11-11
  • Java定义泛型方法实例分析

    Java定义泛型方法实例分析

    这篇文章主要介绍了Java定义泛型方法,结合实例形式分析了java定义泛型的相关操作技巧与注意事项,需要的朋友可以参考下
    2019-07-07
  • Java多线程中Lock的使用小结

    Java多线程中Lock的使用小结

    jdk1.5 以后,提供了各种锁,本文主要介绍了Java多线程中Lock的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • SpringCloud2020.0.x版UnderTow AccessLog相关配置简介

    SpringCloud2020.0.x版UnderTow AccessLog相关配置简介

    本文详细介绍了SpringCloud中AccessLog的相关配置,我们可以根据文中的相关数据配置出所需的AccessLog的信息以及格式,感兴趣的小伙伴可以参考一下
    2021-08-08

最新评论