日志文件是一直打开,多线程通过队列写入,一般是行缓冲,程序停止会自动关闭句柄。nginx也是这么做的,大部分的应用程序都是这么做的,频繁的打开文件句柄会耗费额外的性能,得不偿失。

一般情况下,有成熟的日志处理框架来处理这些事情,不需要你自己实现。

你提到如果一直打开,你不能通过别的方式修改以及删除这个文件,这个是肯定的。当然这也延伸出另外一个问题,就是你一个程序如果启动多次,那在多个进程同时读写一个日志文件时日志内容有问题。