首页 > 其他分享 >logback丢失日志

logback丢失日志

时间:2023-12-02 14:32:55浏览次数:36  
标签:count syncCommands redisClient 实例 丢失 日志 logback connect

问题描述、现象

  1. 项目正常运行
  2. 日志文件生成以及文件名都看不出来问题
  3. 日志里记录的信息也可以记录完整的每次请求记录
  4. 偶尔随机丢失一次或者多次完整的请求记录,与没有收到用户请求情况相同

 

问题排查

  1. 排除AsyncAppender的丢失机制导致,可以将日志记录方式先改为同步方式或者discardThreshold设置为0再验证问题是否还会出现

2、系统多实例部署,用于多个实例运行,日志配置文件完全相同,会导致多个实例往同一个文件写日志,触发日志滚动机制时,会出现日志覆盖的情况。

问题处理

  1. AsyncAppender丢失机制导致可以改为同步打印或者discardThreshold设置为0
  2. 多实例部署情况:可以获取当前服务的本地ip地址,写入日志变量,进行日志文件名称区分,不同的实行写入不同的文件内即可解决;
//写入变量
      System.setProperty("instanceIp", "XXX");
      //springboot启动类
      SpringApplication.run(ElectricRecordApplication.class, args);
logback.xml   //日志配置文件


    //引用变量
        <springProperty scope="context" name="instanceIp"  source="instanceIp" defaultValue="" />
        <fileNamePattern>${appLogPath}/%d{yyyy-MM-dd,aux}/logFile.%d{yyyy-MM-dd_HH}${instanceIp}.log</fileNamePattern>
try{
            RedisURI uri = RedisURI.Builder.redis("XXX", 16379)
                    .withDatabase(6)
                    .withPassword("XXXX")
                    .build();
            redisClient = RedisClient.create(uri);
            connect= redisClient.connect();
            RedisCommands syncCommands = connect.sync();
            Object count = syncCommands.get("count");
            if(StringUtils.isEmpty(count)){
                syncCommands.set("count", "1");
                type="_A";
            }else{
                int i = Integer.parseInt(count.toString());
                if(i%2==0){
                    type="_A";
                }else{
                    type="_B";
                }
                syncCommands.set("count", String.valueOf(i+1));
            }
            connect.close();
            redisClient.shutdown();
        }catch (Exception e){

        }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



标签:count,syncCommands,redisClient,实例,丢失,日志,logback,connect
From: https://blog.51cto.com/u_15242378/8656919

相关文章

  • Thinkphp 3.2 Cookie丢失导致中英文混排
    问题关键:CheckLangBehavior.class.php文件中,使用cookie保存语言版本,如果cookie数据被清或者丢失,导致页面出现非预期版本解决办法:不使用cookie保存数据,使用session保存数据,但会出现另外一个问题,CheckLangBehavior.class.php中无法获取session数据实现方式1:修改tags.php'app_be......
  • 日志模块——loguru的使用
    安装pipinstallloguru1、输出日志fromloguruimportloggerlogger.debug("这是一条debug日志")终端执行后出现带颜色的日志:  2、输出到文件fromloguruimportloggerlogger.add("file_{time}.log")logger.debug("这是一条debug日志")logger.info("这是一条......
  • Hadoop 配置日志聚集
    本文章的前置Hadoop-3.3.6分布式集群搭建步骤概念:集群中的每台Hadoop节点的运行都会产生日志,开启日志聚集后,将所有运行日志信息上传到HadoopHDFS系统上,可以更好的查看运行详情,方便开发及调试。注意:需要重启NodeManage、ResourceManager和HistoryServer来开启日志聚集功能。1.......
  • Python日志库Loguru教程
    标题Python日志库Loguru教程(最人性化的Python日志模块)1.What:我们需要一个什么样的日志库可以区分不同类型的日志:正常,警告,错误,严重。可以配置指定的日志文件名称。可以配置指定的日志格式。可以把不同的日志类型写到不同的文件中。可以配置按照时间,文件大小等条件对日志文......
  • 如何保证RocketMQ消息不丢失
    一、概述一个消息从开始到结束会经历这么三个阶段:生产阶段、消息队列Broker存储阶段和消费阶段。一个消息在三个阶段中的任何一个阶段都有可能丢失,知道这个之后,我们只要保证这三个阶段不出现问题,消息自然就不会出现丢失了。接下来我们来细说一下如何保证这三个阶段不出现问题。......
  • ClickHouse + ClickVisual 构建日志平台
    越来越多的互联网公司开始尝试ClickHouse存储日志,比如映客、快手、携程、唯品会、石墨文档,但是ClickHouse存储日志缺少对应的可视化方案,石墨文档开源了ClickVisual用于解决这个问题。笔者初步尝试了一下ClickVisual,一点小小的实践经验,与各位分享。简介ClickVisual官方宣......
  • Spring Boot 控制台日志打印颜色表
    //ResetpublicstaticfinalStringRESET="\033[0m";//TextReset//RegularColorspublicstaticfinalStringWHITE="\033[0;30m";//WHITEpublicstaticfinalStringRED="\033[0;31m";//......
  • Shell封装日志函数
       使用echo打印输出日志严重影响观瞻,想打印时间戳就得每次都得把date命令加上,想自动加点别的东西真是好麻烦,封装一个日志函数,方便脚本在运行的时候输出日志,超级方便1、简单定义一个log函数function_log(){echo-e"${@}"}_log"helo"用的时候直接把想打印的信......
  • log4j的日志信息记录maven
    本地调用三方包,日志信息很关键,log4j有多种日志级别Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样......
  • js精度丢失的问题,利用lodash函数库重新封装
    functionroundAndPad(num,decimalPlaces){  varrounded=_.round(num,decimalPlaces); //使用Lodash的_.round函数四舍五入  varstr=rounded.toString();  vardecimalIndex=str.indexOf('.');  console.log("str:",str);  console.lo......