$stream = $this->stream;
if (!is_resource($stream)) {
throw new \LogicException('No stream was opened yet');
}
if ($this->useLocking) {
// ignoring errors here, there's not much we can do about them
flock($stream, LOCK_EX);
}
$this->streamWrite($stream, $record);
if ($this->useLocking) {
flock($stream, LOCK_UN);
}
// ignoring errors here, there's not much we can do about them
打印下看下执行到Log::debug没。monolog应该不会有这么明显的bug
Log::debug 后面的数据都插入成功了
monolog\src\Monolog\Handler\StreamHandler.php的第158行
// ignoring errors here, there's not much we can do about them
我猜有可能是因为互斥了
多数是记录的,但是100次会有3次左右不会记录日志的问题
这个情况我觉得有可能是互斥问题,因为文件加锁了,也是很少的情况下会有不记录的情况产生,你可以把你的进程数或者并发写入文件的地方处理一下,缩小范围排查一下,我觉得应该是这个问题
好的,这个明天我试试。这个会不会和我使用
tail -f webman.log
实时查看日志有关系你如果用tail -f来进行观察的话,不一定准确,tail -f如果文件改变了,他就会去查看文件内容;你不如用最原始的方法,就是在一定时间内写入固定条数,最后在检查条数是否符合预期
上面的问题已经在生产环境了。一定时间内写入固定的条数是没问题的。就是这个几率是很低了,出现问题也是跟踪了几天。发现这个问题才来这里提问的。下来我不实时查看是否会有这个问题。看看
tail -f
会不会出发$this->useLocking
这个条件我这里推荐,可以依据StreamHandler重写一个,实现HandlerInterface就好了,在遇到互斥的问题的时候,可以阻塞,或者用其他方法解决
这个暂时没时间搞着,后面有时间可以写个看看哈!