验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

logback怎么自定义指定日志文件存储目录

阅读:1311 来源:乙速云 作者:代码code

logback怎么自定义指定日志文件存储目录

      logback自定义指定日志文件存储目录

      1、正常使用

      定义一个logback.xml配置文件即可:

      
       
      
       
          
          
       
          
          
              
                  ERROR   
                  DENY
                  ACCEPT
              
              
                  
                      %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
                  
              
              
              
                  
                  ${LOG_HOME}/mds-tool-box-info.%d.log
              
          
       
       
          
              
                  ERROR  
              
              
                  
                      %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
                  
              
              
              
                  
                  ${LOG_HOME}/mds-tool-box-error.%d.log
              
          
       
          
      
              
              
          
       
      

      2、自定义指定日志文件存储目录

      2.1 定义监听器

      /**
       * @version 1.0
       * @class: CustomLogContextListener
       * @author: carlo
       * @mail: carlo_cwh@qq.com
       * @date: 2021/8/25 10:01
       * @description: 定义logback 日志监听器,指定日志文件存放目录
       */
      public class CustomLogContextListener extends ContextAwareBase implements LoggerContextListener, LifeCycle {
       
          /** 存储日志路径标识 */
          public static final String LOG_PAHT_KEY = "LOG_PATH";
       
          @Override
          public boolean isResetResistant() {
              return false;
          }
       
          @Override
          public void onStart(LoggerContext loggerContext) {
       
          }
       
          @Override
          public void onReset(LoggerContext loggerContext) {
       
          }
       
          @Override
          public void onStop(LoggerContext loggerContext) {
       
          }
       
          @Override
          public void onLevelChange(Logger logger, Level level) {
       
          }
       
          @Override
          public void start() {
              // "user.dir"是指用户当前工作目录
              String s = System.getProperty("user.dir") + "/logs/";
              System.setProperty(LOG_PAHT_KEY, s);
              Context context = getContext();
              context.putProperty(LOG_PAHT_KEY,  s);
          }
       
          @Override
          public void stop() {
       
          }
       
          @Override
          public boolean isStarted() {
              return false;
          }
      }

      2.2 在logback.xml日志文件中指定监听器

      
       
      
       
          
          
       
          
          
              
                  ERROR   
                  DENY
                  ACCEPT
              
              
                  
                      %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
                  
              
              
              
                  
                  ${LOG_PATH}/mds-tool-box-info.%d.log
              
          
       
       
          
              
                  ERROR  
              
              
                  
                      %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
                  
              
              
              
                  
                  ${LOG_PATH}/mds-tool-box-error.%d.log
              
          
       
          
      
              
              
          
       
      

      其中  ${LOG_PATH} 为我们在监听器中定义的 key 值

      logback基本配置说明

      logback继承自log4j,它是spring boot默认的日志集成框架,官网地址:https://logback.qos.ch/

      spring boot默认日志框架

      当我们启动spring boot项目的时候,没有进行任何日志的配置,控制台能输出日志,原因是spring boot内置了org.springframework.boot.logging.logback日志,里面配置了base.xml文件,引入了基础的日志输出格式。

      logback怎么自定义指定日志文件存储目录

      当我们项目部署到服务器后,会在与jar同级的目录下生成一个默认日志文件,文件名为jar包的名称。

      logback怎么自定义指定日志文件存储目录

      自定义logback配置文件

      默认的日志文件,生成的日志格式配置不是我们所希望的,默认日志输出格式:

      logback怎么自定义指定日志文件存储目录

      此时我们可以自定义logback配置文件,默认的日志文件名为logback.xml,spring官方首推的默认日志文件名为logback-spring.xml;若是我们想命名为其他的名称,也是可以的,在properties或者yml配置文件中指明下日志路径和名称即可:

      logging:
        config: classpath:logback-xxx.xml

      日志文件统一放在目录:src/resources之下。

      配置文件说明

      先来看一个完整的配置文件:

      
      
      
          
          
              
              
              
              
          
          
              
              
              
              
          
          
              
              
              
              
          
          
          
      
          
          
              
              
                  
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n
              
              
              
                  
                  ${CONSOLE_LEVEL}
              
          
          
          
          
              
              ${LOG_HOME}/auth-open.info.log
              
                  
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n
              
              
              
                  
                  ${LOG_HOME}/auth-open.info.%d{yyyy-MM-dd}.log
                  
                  ${maxHistory}
              
          
          
          
              ${LOG_HOME}/auth-open.error.log
              
                  ERROR
              
              
                  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n
              
              
                  ${LOG_HOME}/auth-open.error.%d{yyyy-MM-dd}.log
                  ${maxHistory}
              
          
      
          
          
              
              
              
          
      
      

      配置文件描述:

      • ①配置文件有变动自动扫描,扫描周期是60秒。

      • ②输出的根目录日志级别是info,日志文件配置了控制台输出,滚动日志输出,错误日志输出。

      • ③根据spring不同的激活环境,日志的输出目录配置为不同的值;开发环境控制台出入的级别为info(与根目录保持一致),线上环境和测试环境为off(不输出日志,因为控制台输出的日志与发布的jar包在同一目录下,没法进行删除,造成日志文件冗余)。

      • ④以日期为滚动文件的存储策略,设置日志最大存储量为30,大于30时,自动删除创建是时间最早的日志。

      configuration

      configuration是最外层的配置,在其内包含所有的配置信息。

      • scan:当配置文件发生变动时,是否自动扫描配置信息,true:自动扫描,false:不扫描。

      • scanPeriod:自动扫描的时间周期,默认是毫秒,当scan为true时才有效。

      • debug:是否打印logback内部日志信息,默认是false。

      springProfile

      根据spring boot项目激活的文件,定义对应的配置信息,用于区分同一变量在不同环境下的值。

      • name:用于指定激活的配置文件,例如测试环境spring.profiles.active为dev,线上环境为pro,此时可以给不同的环境下同一变量设置不同的属性值。

      • property:定义变量,name为后续引用的名称,value为变量的值,后续可以使用${}引用此变量。

      root

      root为配置文件的根节点,可以配置日志的级别和日志输出的引用。

      • level:日志级别。

      • appender-ref:日志追加的引用,配置ref值与appender标签关联使用。

      appender

      定义日志追加的相关信息,name的值与appender-ref中的ref值对应。

      ConsoleAppender

      控制台输出日志的类,存在于包ch.qos.logback.core.ConsoleAppender下,可以配置控制台输出的格式,日志级别。

      RollingFileAppender

      滚动日志的类,存在于包ch.qos.logback.core.rolling.RollingFileAppender,可以滚动存放日志信息。

      RollingPolicy

      滚动日志的策略,可以根据时间滚动TimeBasedRollingPolicy,时间和文件大小滚动SizeAndTimeBasedRollingPolicy。

      • fileNamePattern:滚动文件名的表达式。

      • maxHistory:最大历史记录,当大于最大历史记录时,会删除创建时间最早的一份日志记录

      encoder

      • 把事件转化成byte数组,并把数组输出为文本。

      pattern

      • 输出日志的格式表达式,例:

      %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n
      • %d:日期格式表达式,语法与SimpleDataFormat相同。

      • %thread:线程名。

      • %-5level:日志级别的前五位字符。

      • %logger{20}:输出类名(从左开始缩短 ,每个层级至少保留1位),20位,例:

      完整logger名 : cn.xbz.test.HelloController
      %logger : cn.xbz.test.HelloController
      %logger{0}: HelloController
      %logger{5}: c.x.t.HelloController
      %logger{20}: c.x.test.HelloController
      • msg:日志信息。

      level级别

      logback有5种级别,分别是Trace

      • Trace:追踪,就是程序推进一下,你就可以写个trace输出。

      • Debug:指出细粒度信息事件,对调试程序非常有帮助。

      • Info:粗粒度级别上突出强调应用程序的运行过程。

      • Warn:输出警告及warn以下级别的日志。

      • Error:输出错误信息日志。

      • Off:关闭全部日志输出。

      • All:开启全部日志输出。

      如果logger没有分配日志级别,会从被分配级别最近的父类那里继承级别,root logger默认级别是Debug。

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>