背景


公司的生产环境中,使用gunicorn部署后端后端django服务,每天会产生很多前端掉调用后端api的日志文件,为了方便管理这些文件,使用了Linux自带的日志切割工具logrotate,每天对log目录下的日志文件进行切割备份,使用起来十分方便。

但是在使用两天后发现了一个问题:虽然日志文件每天凌晨三点会进行切割,并将老的日志文件以时间戳为结尾进行备份,但是程序依然会将日志信息写入老文件中,新的日志文件一直为空。配置及测试结果如下:

切割结果:

由上图可见,日志切割认为已经完成了,但是日志文件依旧会写进老文件中。

原因


在网上查阅资料后发现了问题原因所在:虽然日志文件已经切割,老文件已经备份,但是rsyslog并不知道新文件的存在,在存储日志时依旧会打开旧日志文件。这是因为logrotate在切割备份时只是修改了文件名称,inode号并没有修改,rsyslog依旧会根据旧inode号打开日志文件。

 解决方案


针对此问题,有两种解决方案供大家选择:

1、在配置/etc/logrotate.d/目录下的配置文件中添加参数copytrancate

原理:可以理解为把内容拷贝走作为备份,然后清空当前文件。

不足:拷贝和截断之间有时间差,如果在切割时期日志写入量比较大的话会造成大量日志丢失,个人觉得不适用于生产环境。

2、给rsyslog发信号。重新打开log文件,配置文件如下:

在每次进行日志切割后,给rsyslog进程发送信号,读取新的日志文件。

配置后使用logrotate -f /etc/logrotate.d/xxx进行测试,日志切割正常,信息也正常写入日志文件中!!!!

[踩坑篇]logrotate切割日志后,日志还是写在老日志文件中相关推荐

  1. phpcmsV9-本地项目上线 - 踩坑篇

    phpcmsV9-本地项目上线 - 踩坑篇 使用phpcmsV9框架架构的项目,在本地上传到进行服务器部署的时候,多多少少会遇到一些问题. 这里就常见问题进行简单罗列,以及简单解答. 1. wamp集 ...

  2. phpcmsV9 QQ登录问题分析 - 踩坑篇

    是否遇到过以下的问题: 问: phpcms v9会员登录注册怎么一直提示操作失败啊,前台后台都是!连接数据库没问题,更新缓存也没用 答: 重装apache就好了? 问: phpcms 注册 添加用户 ...

  3. vantUI组件:van-card 自定义内容 - 踩坑篇

    vantUI组件:van-card 自定义内容 - 踩坑篇 特别说明: 自定义用法,格式必须: <van-card> <template #tags> ····自定义内容·· ...

  4. vantUI组件:获取验证码 - 踩坑篇

    vant 的button组件:(发送验证码)按钮点击没反应? 应用场景 · 前戏: 效果图解说: 代码公示: <van-fieldv-model="sms"centercle ...

  5. vantUI 弹出层(轻提示)案例 - 踩坑篇

    vantUI 弹出层(轻提示)- 踩坑篇 可自定义项: 显示时长 显示内容 显示何时消失 代码 · 实例: if(this.checkedAgreement == false){this.$toast

  6. 原生Javascript 操作 css类名 - 踩坑篇

    文章目录 原生Javascript 操作 css类名 效果图示下: 案例 · 代码如下: 重要代码提示: 其他无关参考: 官方参考: 原生Javascript 操作 css类名 不建议用 .class ...

  7. MUI 宫格组件(grid)怎么取消mui-active背景色?(优先级设置问题)- 踩坑篇

    MUI 宫格组件(grid)怎么取消mui-active背景色?(优先级设置问题) 对比 · 截图如下: 踩坑总结 · 点击取消效果 · 举例: 优先级: background > backgr ...

  8. el-radio(自定义样式)获取选中label值 + 选中状态 + 拼接String + post提交 - 踩坑篇

    疑问: vue中怎么获取radio的选中值 .选中状态? 效果图 · 截图: 注意点: 需要使用 label传值,后台接什么,你就传什么 (这个需要和后台事先确定好) 使用@change事件,监听鼠标 ...

  9. elementUI组件el-dropdown - 踩坑篇

    选择即改变:click选择哪个,就显示当前的值,页面UI显示并伴随css样式的变化. 重点:v-if 和 v-else-if 的搭配使用,缺一不可. 效果图: 正确的代码如下: 重要提示: 我之前使用 ...

最新文章

  1. python输入和输出的区别_python2和python3的输入和输出区别介绍
  2. div根据滑动页面位置显示
  3. 【python】画一个爱心
  4. 页面残留数据该如何处理
  5. 在WEB中实现打印分页
  6. android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程
  7. Centos系统查看CPU有关信息
  8. python学习网站-python学习网站整理
  9. 彻底解决navicat连接mysql报错:1251Client does not support authentication protocol requested by server......
  10. 下、Hadoop环境搭建——通过Xshell6连接VMware正式配置Hadoop
  11. 数字光电耦合器为汽车应用提供低功耗和高隔离
  12. java pacs上传服务_PACS千万家,好看耐用第一家---基于JAVA开发的跨平台PACS系统
  13. Android实现一键开启自由窗口、分屏、画中画模式——自由窗口模式
  14. Java核心技术 学习记录1
  15. 三件套都有什么_单人床品三件套都有哪些?
  16. 英语自我介绍资料及范文
  17. iOS AFNetworking简介
  18. Windows bat 循环脚本案例
  19. 计算机学院职业规划大赛策划书,大学生职业生涯规划大赛策划书(策划书范文).doc...
  20. 整理Eclipse常用快捷键

热门文章

  1. Android通讯录(联系人)-ContentProvider
  2. php5.5安装大商创,铁杆粉整理 - 大商创X宝塔完整安装教程
  3. 康普分享未来网络四大趋势 光纤将是最佳主角
  4. 一个jar包冲突引起的StackOverflowError
  5. 解决T100设计器无法更新基础数据的幺蛾子
  6. python或c++编写一个文件传输工具
  7. HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者
  8. java ip 白名单_Java代码中对IP进行白名单验证
  9. django restful mysql_如何用Django和restful搭建api接口服务
  10. ios 常见异常之- Terminating app due to uncaught exception ‘NSInternalInconsistencyException‘, reason: