问题描述、现象
- 项目正常运行
- 日志文件生成以及文件名都看不出来问题
- 日志里记录的信息也可以记录完整的每次请求记录
- 偶尔随机丢失一次或者多次完整的请求记录,与没有收到用户请求情况相同
问题排查
- 排除AsyncAppender的丢失机制导致,可以将日志记录方式先改为同步方式或者
discardThreshold
设置为0再验证问题是否还会出现
2、系统多实例部署,用于多个实例运行,日志配置文件完全相同,会导致多个实例往同一个文件写日志,触发日志滚动机制时,会出现日志覆盖的情况。
问题处理
- AsyncAppender丢失机制导致可以改为同步打印或者
discardThreshold
设置为0 - 多实例部署情况:可以获取当前服务的本地ip地址,写入日志变量,进行日志文件名称区分,不同的实行写入不同的文件内即可解决;
//写入变量
System.setProperty("instanceIp", "XXX");
//springboot启动类
SpringApplication.run(ElectricRecordApplication.class, args);
logback.xml //日志配置文件
//引用变量
${appLogPath}/%d{yyyy-MM-dd,aux}/logFile.%d{yyyy-MM-dd_HH}${instanceIp}.log
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(coun服务器托管网t)){
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){
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
1. 全球财经事件用户使用场景:金融公司的市场部门工作人员的主要工作是跟踪财经事件,分析市场走势。日常每天早上打开电脑,查询各大财经的重点事件,市场涨跌情况和个股分析等,并将收集到的数据整理到飞书多维表格进行汇总,方便部门人员查看各项指数。但面对大量数据,人工…