多进程使用同一log4j配置导致的日志丢失与覆盖问题

最近接手了一个流传很多手的魔性古早代码,追日志时发现有明显缺失。对log4j不熟,不过可以猜测日志出问题肯定和多进程使用同一个log4j配置有关。经多次排查,终于捋清了其中逻辑。本文对排查过程进行复盘。 一、表征 故事背景:项目有多个入口。一边即以持续运行获取消息的后台进程形式运行,一边又作为单次任务调度的普通进程被不断启动并结束退出。也就是说,同一个项目同时运行着多个进程,并且使用着同一个log4j配置。 下面称后台进程为进程A,普通进程为进程B。A在后台持续运行,B多次短暂执行。 |<--
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

数据库拆分:垂直拆分与水平拆分六大原则

数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分,我先讲拆分前需要做的事情: 第一步:采用分布式缓存redis、memcached等降低对数据库的读操作。 第二步:如果缓存使用过后,数据库访问量还是非常大,可以考虑数据库读、写分离原则。 第三步:当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。 数据库拆分原则:就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。 第
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

一、man、系统工作、系统检测命令

目录 一、man命令 (一)常用按键 (二)结构意义 二、常用系统工作命令 (一) echo (二)date (三)reboot (四)powoff (五)wget (六)ps (七)top (八)pidof (九)kill (十)killall (十一) Ctrl + C 和& 三、系统状态检测命令 (一)ifconfig (二)uname (三)uptime (四)free (五)who (六)last (七)history和cat 一、man命令 (一)常用按键 空格键 向下翻一页 Pa
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

学习Spring-Data-Jpa(十三)---动态查询接口JpaSpecificationExecutor

1、JpaSpecificationExecutor   JPA2引入了一个criteria API,我们可以使用它以编程的形式构建查询。通过编写criteria,动态生成query语句。JpaSpecificationExecutor是Spring-Data-JPA为我们执行基于JPA criteria API的Specification查询接口。想要使用该功能,我们自己的Repository接口继承这个接口就可以了。该接口提供了几个根据Specification进行查询的方法。   Jpa
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

树莓派4安装net core3.0环境

树莓派4官方系统是32系统,所以需要安装arm32版本的net core sk和runtime 1,首先创建一个文件夹 dotnet-arm32 sudo mkdir dotnet arm32 2,下载sdk和runtime wget https://download.visualstudio.microsoft.com/download/pr/0b30374c-3d52-45ad-b4e5-9a39d0bf5bf0/deb17f7b32968b3a2186650711456152/dotne
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

002_SSIS空值处理与OLE DB目标编辑器

1.当平面文件文件中含有空值时,选中下面的选项,平面文件会把空值转换为null进行往下输出 2.数据访问模式中,表或视图数据加载较慢,为一行一行的insert,表或视图-快速加载为批量加载 保留标识:即像含有identify的列插入数据时,列的值由数据流中的数据导入,不是数据库自动生成的。 保留null:例如当字段含有default 值为 ‘-’时,勾选中后,null值插入到数据库为null,不勾选,插入到数据库为默认值 表锁:勾选中,插入数据库是,别人只能执行select操作,不能updat
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

3.1-2 在linux上部署spring cloud配置服务的步骤

1、构建jar:在idea中导入工程后,使用maven的package命令打包为jar:configurationserver-0.0.1-SNAPSHOT.jar。 2、修改配置文件application.yml为如下内容: server: port: 8888 spring: profiles: active: native cloud: config: server: native: searchLocations: file:///home/work/microservice/spmi
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

2.4.2 服务引导:管理微服务的配置

服务引导(图2-6中的步骤2)发生在微服务首次启动并需要加载其应用程序配置信息的时候。图2-8为引导处理提供了更多的上下文。 任何应用程序开发人员都知道,有时需要使应用程序的运行时行为可配置。通常这涉及从应用程序部署的属性文件读取应用程序的配置数据,或从数据存储区(如关系数据库)读取数据。 微服务通常会遇到相同类型的配置需求。不同之处在于,在云上运行的微服务应用程序中,可能会运行数百甚至数千个微服务实例。更为复杂的是,这些服务可能分散在全球。由于存在大量的地理位置分散的服务,重新部署服务以获取
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

函数练习题17

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>//函数练习题 #include<stdlib.h> int a = 5; void fun(int b){ static int a = 10; a += b++; printf("%d\n", a); } void main(){ int c = 20; fun(c); a += ++c; printf("%d\n", a); system("pause"); return 0; } void
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

springboot-异步、发送邮件(二)

@Test //发送复杂邮件 void contextLoads2() throws MessagingException { MimeMessage mimeMessage = mailSender.createMimeMessage(); //组装 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); //正文 hel
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

[Clang] Windows+Clang+MinGW-未完成

//超链接还没有插入 本篇文章简单的介绍一下大概怎么用,我也不是可懂,所以不要抱有太大期望。 目录 Clang是什么?MinGW又是什么?:编译器GCC与Clang的异同 他们俩在一起能干啥? Clang是一个编译器前端,我也不是太懂,大概就是不能直接用,要配合后端使用。在这里,我们将使用MinGW作为Clang的后端来组合成一个完整的编译器。 首先要安装Clang:Clang安装教程 然后安装MinGW:MinGW安装教程 配置好各自的环境变量:配置环境变量教程 打开cmd,输入以下指令,测
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

c++——输入输出

>>:提取符 <<:插入符 <iostream>:包含cin,cout <fstream>:包含ofstream,ifstream,实现了应用程序和文件间的数据交流
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

POJ 2418 Hardwood Species

POJ 2418 Hardwood Species 题目传送门 Description Hardwoods are the botanical group of trees that have broad leaves, produce a fruit or nut, and generally go dormant in the winter. America's temperate climates produce forests with hundreds of hardwood spe
分类: 其他 发布时间: 12-02 21:01 阅读次数: 0

memoization-根据输入重新计算render的数据

在实际开发过程中,经常遇到根据输入数据,重新计算需要渲染的数据的情况。 如实时查询等。 常用方法: 1)在getDerivedStateFromProps()中判断涉及的属性变化,来更新数据。 这种方法在涉及属性较多时,特别复杂。 2)在render()方法中计算数据,并且使用PureComponent。 这种方法只要render就会计算,即使其他无关属性,也会导致重新渲染,从而触发计算。 特别是数据较大时,特别影响性能。 memoization memoization函数可以解决上面两个方法
分类: 其他 发布时间: 12-02 21:00 阅读次数: 0

整理unittest框架-2019-12-2

#自测的过程就是单元测试 #自己写一些测试的代码,来测试自己写的代码功能看看有没有实现 import unittest def add(a,b): return a+b class AddTest(unittest.TestCase): @classmethod def setUpClass(cls): print('setUPclass') @classmethod def setUp(self):#执行前都i要执行他,每条用例
分类: 其他 发布时间: 12-02 21:00 阅读次数: 0

前置内容2:复杂度分析

注意:本文中所提到的\(\log n\),都指的是\(\log _2n\),另外所有除法都为整除,此外不讨论多种\(O\)记号写法所代表的意义之间的差别。 对于一个确定的问题,衡量一种解题方法的标准有两种:一是正确性,二是运行效率。 如果某个算法是错误的,那么没有讨论的价值。而效率的衡量是相对不容易的,因为这涉及到硬件等因素的影响。那么我们如何从这个角度衡量算法优劣呢? 主要来看看时间方面的效率。 可以发现,对于一组确定的数据,某个非随机化的程序在不同的机器上运行的时间可能不同,但是流程是相同
分类: 其他 发布时间: 12-02 21:00 阅读次数: 0

日志测试

最近新get日志测试方法,分享出来! 一.我们为什么要做日志测试? 虽然额外的日志记录可能会导致软件程序的执行速度下降。但如果有详细的日志记录就可以帮助我们更迅速地诊断问题,加快我们对故障的响应,并且往往可以显著地减少发现一些隐藏得非常深的错误的问题! 二.日志级别 log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。 ALL 最低等级的,用于打开所有日志记录。
分类: 其他 发布时间: 12-02 21:00 阅读次数: 0

3.3.4 使用@Value 注解直接读取属性

在上一节的LicenseService类中,读者可能已经注意到,在getLicense()中使用了来自config.getExampleProperty()的值来设置license.withComment()的值。所指的代码如下: public License getLicense(String organizationId,String licenseId) { License license = licenseRepository.findByOrganizationIdAndLicens
分类: 其他 发布时间: 12-02 21:00 阅读次数: 0

B - Area of Two Circles' Intersection CodeForces - 600D

题目链接:https://codeforces.com/problemset/problem/600/D You are given two circles. Find the area of their intersection. Input The first line contains three integers x1, y1, r1 ( - 109 ≤ x1, y1 ≤ 109, 1 ≤ r1 ≤ 109) — the position of the center and the r
分类: 其他 发布时间: 12-02 21:00 阅读次数: 0

连接数据库,查询当前的数据库名、服务名、实例名、表空间、用户名

1.使用plsql: sqlplus /nolog (Linux:su - oracle) 2.连接数据库: 连接本地数据库:conn / as sysdba 远程连接数据库:conn username/password@IP地址:端口/orcl; 3.查询当前的数据库名、服务名、实例名、表空间、用户名: 数据库:select name from V$database; 服务名:show parameter service_names; 实例名:select instance_name fro
分类: 其他 发布时间: 12-02 21:00 阅读次数: 0