最近在学习Web开发,发现应用程序会以以下格式写入/tmp/appname/logs/a.log
或运行日志:/tmp/appname/logs/a.log.1
{"message": "do task a", "level": "INFO", "timestamp": "2020-11-15T02:09:23.049742Z", "logger": "service1"}
{"message": "do task b", "level": "INFO", "timestamp": "2020-11-15T02:09:27.646271Z", "logger": "service2"}
{"message": "do task c", "level": "INFO", "timestamp": "2020-11-15T02:09:28.055893Z", "logger": "redis-service"}
{"message": "do task d", "level": "INFO", "timestamp": "2020-11-15T02:09:32.651385Z", "logger": "nginx-service"}
{"message": "do task e", "level": "INFO", "timestamp": "2020-11-15T02:09:33.062060Z", "logger": "rest-service"}
从时间戳中我们可以看到这些任务的事件几乎是同时运行的。因此这些应用程序将它们的状态记录到这些日志文件中。
我的问题是,有这么多的应用程序(或进程)同时并发写入日志文件,这是否会因为大量写入操作而对保存日志文件的硬盘造成损害?硬盘将承担大量写入日志的任务。
我记得有个flush
操作是把缓冲区里的内容提交上去,做最后的写盘。但是我担心硬盘负载过重。有没有什么好的编程原则可以保护硬盘?我觉得一个办法就是把内存当缓存,先把日志写到内存里,等缓冲区满了再真正写盘。这样可以节省硬盘的寿命。
答案1
任何磁盘,无论是 HDD 还是 SSD,都可以轻松承受每隔几秒一次的写入。
典型的磁盘被设计为承受以 GB 为单位的每日流量,因此这几行不会影响磁盘的预期寿命。