## linux 下写文件的问题 ##

keios 2002-12-09 10:07:52
在一个软件中需写日志文件,但是要求日志文件的大小不能超过1M字节。
文件中始终保持最近的日志内容。
请问有没有什么方便而高效的实现方法?

我粗略想了一下,只想到这样的方式:
把最近1M字节内容都保存在内存中,以队列的方式,
超过1M新写日志时冲掉前面的内容。
但每次都要重写整个文件,效率极其低下。
...全文
49 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
linuxnewer 2003-01-02
  • 打赏
  • 举报
回复
mark
wwwunix 2003-01-02
  • 打赏
  • 举报
回复
点帖子右边的管理给分。
keios 2002-12-31
  • 打赏
  • 举报
回复
问题已经解决,参考了一些软件的做法,
使用双文件方式,写一个大到一定程度后,将其更名为另一个,
再新建文件继续写,如此反复。
说出来不知道对大家有没有帮助。
可是实在不知道应该怎么给分,呵呵
keios 2002-12-09
  • 打赏
  • 举报
回复
谢谢。

使用辅助工具的方法是可以,但不能保证控制大小,
因为有时会有突发事件使日志大小剧增,很快将硬盘撑爆。

因此还是希望在写时控制大小,但是不知道有没有好的实现方法。
如果实在没有的话,才考虑其他变通的方法。
x86 2002-12-09
  • 打赏
  • 举报
回复
你可以用logrotate,它是这样做的:达到一定大小后自动备份,然后将日志截为0字节。你需要在cron里面运行logrotate,根据需要可以定为一天或者一小时运行logrotate,还可以定制保存几份备份。
apache的日志就是用logrotate来限制大小的。
在/etc/logrotate.d目录下建一个文件,设置自定义的选项,比如apache就有一个httpd文件,内容是:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
你man一下logrotate就知道了,这里是另一个例子,保持access.log的5个备份,每个大小限制在100k,如果超过了就发邮件给www@my.org,并重起httpd(发信号给httpd,并非真正重起)
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size=100k
sharedscripts
postrotate
/sbin/killall -HUP httpd
endscript
}
要注意的是logrotate并不是实时监控日志,它需要在cron运行,你可以定制运行的频率,一般一天一次就可以了。

23,218

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧