Nginx日志自动按日期存储

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。但是他的日志系统实在是太欠了,所有的日志都会输出到一个文件中,随着时间的过去,那个文件变得越来越大,对我们分析日志非常不方便。

网上目前出来的方式都是在 linux下写脚本来分割日志,但是这种方式很不方便,尤其是对linux环境不熟悉的同学,写这个很费劲,而且系统重启之类的,这个脚本要重新启动,等等,总之很烦。

但是今天,我给大家带来了完美的解决方案,那就是修改nginx源代码,让他支持日志分割。

可能有的朋友看到这会说这个更麻烦,确实修改源代码不是一件容易的事。不愿意看如何修改的朋友,这里直接给出修改后的链接,下载就能用了

nginx-1.4.1 下载地址: nginx-1.4.1-with-log-split

nginx-1.5.9 下载地址: nginx-1.5.9-with-log-split (推荐)

上面的1.4.1版只支持新建文件,1.5.9支持新建文件和文件夹(推荐下载)

日志配置方式请参考src文件夹中的nginx.conf来配置

1.4.1 配置文件中新增了 date_udf (格式:yyyy-MM-dd) 变量

1.5.9 配置文件中新增了 date_udf (格式:yyyy-MM-dd), year_udf (格式:yyyy), month_udf (格式:MM), day_udf (格式:dd)。

# access_log  logs/yearudf/yearudf/month_udf/dayudf/dayudf/date_udf-access.log  main; //别忘了把配置文件中的 main 放开

上面的方式配置 到时候日志会在 logs/yyyy/MM/dd/yyyy-MM-dd-access.log 文件中。

特别提示:请给你指定的logs文件夹指定nginx用户的写权限(所谓的nginx用户是指 nginx 配置文件中指定的那个用户)

==================================

作者:知乎用户 链接:https://www.zhihu.com/question/20005591/answer/13655393 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在ngx_http_log_module的log_format(http://wiki.nginx.org/HttpLogModule#log_format)中提供的变量可以理解为内置变量,只有在对log格式进行制定时才可以使用。对此,我觉得可能是因为在NGX_HTTP_LOG_PHASE阶段对请求的处理其实已经结束,所以作者在设计时觉得没有必要把这些变量作为常规变量暴露出来。
我知道以下的模块或项目可以访问到nginx的时间变量。 •ngx_time_var(http://bit.ly/zfAskP),如果你的需求不复杂,它可以胜任。
•ngx_set_misc (http://wiki.nginx.org/HttpSetMiscModule#set_local_today),提供了yyyy-mm-dd格式的日期。
•ngx_lua(https://github.com/chaoslawful/lua-nginx-module),其中提供了和时间相关的api。
•Tengine(http://tengine.taobao.org/document_cn/variables_cn.html),官方微博上说这些变量是为了实现按时间自动切割日志保留的。
PS:大部分nginx时间相关的api在src/core/ngx_times.h,里面时间相关的变量都是缓存过的,可以避免系统调用。

最新文章

  1. spring 上传 下載文件
  2. CSS :first-child 选择器 和 HTML DOM firstChild 属性
  3. loadrunner关联取参--响应值unicode编码处理过
  4. 查看maven项目的依赖关系 mvn dependency:tree
  5. 在集群环境中使用 EhCache 缓存系统|RMI 集群模式
  6. SQL Server 内存开销分析
  7. mysql学习(四)-字段类型
  8. SQL开发中容易忽视的一些小地方( 三)
  9. 最新发布树莓派2代Wi-Fi自动连接实战(适合初学者)
  10. FileOutputStream flush()
  11. strspn 和strcspn
  12. 201521123028 《Java程序设计》第11周学习总结
  13. Java入门篇(四)——数组
  14. linux 下vim中关于删除某段,某行,或者全部删除的命令 ZZ
  15. Vue中transition和animation的使用
  16. 关于ajax及相关数据传输问题
  17. spring boot swagger-ui.html 404
  18. Neural Networks and Deep Learning(week3)Planar data classification with one hidden layer(基于单隐藏层神经网络的平面数据分类)
  19. vscode 中使用php-cs-fixer和PHP Formatter 插件规范化PHP代码
  20. SimpleAdapter & BaseAdapter

热门文章

  1. P2P通信标准协议(二)之TURN
  2. PostgreSQL配置文件--资源使用(除WAL外)
  3. 腾讯云linux服务器分区方案
  4. 面试题:Java中值传递和引用传递的问题
  5. Android Studio NDK 新手教程(5)--Java对象的传递与改动
  6. linux设置定制器自动执行任务
  7. Windows命令行报错:'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件
  8. Jacoco覆盖率工具使用之maven篇
  9. Gperftools中tcmalloc的简介和使用(转)
  10. LeetCode——Anagrams