端午节小假期回老家看望父母。回来上班后,领导一脸怒色的问:“你那个日志工具类咋写的呀,记日志出了那么多问题,我搞不懂,难道你们平时不看日志吗?”
这话听起来很不爽。不过毕竟人家是领导,我问是什么情况,他说好多说文件被占用,你自己看看。
我马上打开ie,访问假期里这三天线上的日志文件,第一个便赫然写着:文件“d:logGateWay.Scheduler2017_06_01_14.txt”正由另一进程使用,因此该进程无法访问此文件。
马上再看其他时间和日期记录的日志文件,查了十多个,一共查到2处,并未像领导说的全是异常。
我很确认我的程序,日志Helper类里,向文本文件里写数据时是有同步锁的。所以,按这么理解的话,深信不会出现大面积文件被占用的异常,感觉自己被误解而有些委屈。
过了一会儿,领导开会回来追问是否查到原因了。 我辩解并没有发现那么多异常。
领导叫我去他工位,登陆到远程服务器上,挨个儿点日志文件,点了有十多个,有二三个文件里的确出现很多这个异常。这时,我虽然深信不可能出现,但事实摆在眼前,越发迷惑。领导同时又强调,这两天交易量大,ZH那儿记日志就没有出现这样的问题(ps:ZH是项目组里一伙伴,他的日志记录的实现方式与我的实现方式不同),你问问ZH他是怎么记的,你们沟通一下。
“赶紧查查这个问题吧”领导生气的说。
“那这个问题真不好查”,我当时情绪失控了。怎么就直言顶撞领导了呢?
“你这叫什么话,不好查就不查了?”领导毕竟是领导,重话说完了,马上放缓语气,他要考虑属下的情绪,以免冲突加剧,“以前你也在JD,那么大的日志量,人家是怎么做到的,所以,一定有办法的嘛”
“JD分工比较细,有专门的team搞基建,也有专门的架构师搞这些事情”我把声音降下来。
这时,项目组里一同事过来,他也参与过日志Helper类的重构,把同步记日志改为通过queue异步来记录。他解释说,“国战的日志程序会并把捕获到的异常记录下来,所以有这种异常,咱们都能从日志文件里看到。别人的就不好说了”领导有所理解了,也许ZH在catch里并未处理异常。
话说今天下午线上排障时,在查看日志时碰巧又发现了一个日志文件被占用的异常记录。突然明白了问题是由于一个熟视无睹的事情导致的——假期第一天项目开发组里的同学GL自己部署了一个服务,配置的日志文件路径与我的服务配置的日志文件路径是同一个目录,而且他的逻辑有引用我的代码,就是说我们俩人的服务把日志记录在了同样的日志文件里了。——这样,就很容易理解了,两个服务是两个进程,那么并发的情况下,肯定就会出现文件被占用了。
于是,我让同事修改线上的日志路径。问题得到解决。我已无力再跟他细抠细节。
今天晚上项目组开会整理todolist。领导又提到了我的日志的问题,我没解释,丢了一句“你问问GL吧”。至此,领导心里有没有一杆秤,不再细思。