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

logback丢失日志

时间:2023-11-30 10:35:49浏览次数:39  
标签:count syncCommands 实例 丢失 日志 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,实例,丢失,日志,logback,connect
From: https://www.cnblogs.com/qq376324789/p/17866726.html

相关文章

  • 解决VS编译C++时,该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Uni
    使用VS编译C++时,报错: warningC4819:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode格式以防止数据丢失。利用VS的高级保存选项,修改合适的编码规则即可解决,最新版VS需要手动添加高级保存选线的命令,方法如下:打开工具-->自定义 选择命令-->选择添......
  • Linux学习——日志系统
    目录Linux学习——日志系统10.1日志管理系统10.1.2常见的日志文件10.1.3rsylogd子系统10.2logrotate日志轮转10.3本章小结10.4参考资料Linux学习——日志系统10.1日志管理系统​ ​ ​ ​ ​ ​ ​ rsyslogd进程采集与记录绝大部分与系统相关的日志,包括安全、认......
  • Docker 容器日志查看和清理
    ......
  • mysql慢查询日志
    一、开启并查看慢查询日志1、查看慢查询配置showvariableslike'%query%' 可以看到slow_query_log的值是OFF,也就是mysql默认是不启用慢查询日志的。这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。log_queries_not_using_indexes,如果设置为ON,则会将所......
  • 日志系统
    1.日志概念日志文件是重要的信息系统文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮寄相关信息、各种服务相关信息。不仅如此,日志对于安全来说也很重要,它记录了系统每天发生的各种事情,可以通过日志来检查错误发生的原因或者受到攻击时......
  • SIEM系列|一文读懂 Linux 日志安全分析之文件监控
    摘自:https://zhuanlan.zhihu.com/p/259808863背景介绍在Linux操作系统中,所有内容都是以文件的形式保存和管理的,包括普通文件、目录、网络通信资源等都是文件,即“一切皆文件”。基于这种机制,针对Linux系统层的攻击方式,本质上往往是通过各种方式,对某些敏感文件进行篡改,使入侵......
  • 日志
    基于Lombok使用注解@Slf4j将日志信息输出为日志文件blog.csdn.net成就一亿技术人!maven项目基于Lombok使用注解@Slf4j将日志信息输出为日志文件maven项目基于Lombok使用注解@Slf4j将打印的日志输出为日志文件结果与目的结果目的简述日志等级配置流程导入maven......
  • js阻止浏览器刷新,以防误操作丢失数据
    //禁用回退window.history.forward(1);history.pushState(null,null,document.URL);window.addEventListener('popstate',function(){history.pushState(null,null,document.URL);});//按键判断是否点了刷新相关的按......
  • 日志错位读写的问题
    在对象销毁的时候需要记得销毁句柄:classNgLogger:def__init__(self,module,file_name):self.logger=logging.getLogger(module)self.logger.setLevel(logging.DEBUG)self._fh=logging.FileHandler(file_name)self._fh.setLeve......
  • Linux学习日志
    Linux学习日志环境安装安装软件一般有三种方式:rpm解压缩yum在线安装1、JDK安装我们开发java程序必须要的环境!1、下载JDKrpm。2、安装java环境#检测当前系统是否存在java环境!java-version#如果有的话就需要卸载#rpm-qa|grepjdk#检测JDK版本信息#rpm-e--n......