NGINX按天生成日志文件的简易配置
NGINX按天生成日志文件的简易配置
0x01
最近后端童鞋遇到一个小需求,拆分nginx生成的log文件,最好是按天生成,看着她还有很多bug待改的状态,我说这个简单啊,我来吧。曾经搞node后端的时候,这些东西都so easy的,我还记得当时用log4js,几行配置文件就能搞定,现在就算是直接配置nginx应该也不会特别麻烦。
0x02
先说一下项目的大概架构。整个项目采用docker部署,一共三个container,一个getaway负责整个服务的网络转发,然后就是一个backend和frontend的container。frontend跑在一个nginx镜像中,对应的nginx.conf在frontend repo修改,我们将要操作的也就是这个配置文件。
通过Google,我们能够很容易的找到相关的解决办法,关键字搜索,"nginx generate log file by date",我们能够很容易的找到解决方案:使用map定义一个时间结构,并且在access_log的配置名中加上这个结构,类似下面这样,
nginx.conf
map $time_iso8601 $logdate {
'~^(?\d{4}-\d{2}-\d{2})' $ymd; default 'nodate';
}
accesslog '/var/log/nginx/access${logdate}.log'
0x03
不过吧,上面这种方式居然不起作用,还导致nginx不再记录log文件。好吧,英文的不行,我们看看中文的,关键字搜索,"nginx log文件按天生成", 搜出来一大堆内容差不多的blog,比如,
"nginx日志按天生成&定期删除日志"、"Nginx按天分割轮询日志文件"、"nginx日志access.log error.log按天生成存储,定时删除日志"。

内容大同小异,自己写shell脚本去迁移日志,或者就再加个crontab添加个定时任务的。这种自己写脚本去迁移日志的,就太重了,与我理想的几行配置搞定的初衷不符。
0x04
怎么办呢,我这么不喜欢麻烦的人,那我们还是回到上一个解决办法再瞧瞧吧。现在来想一想,为什么我们像0x02那样的解决办法不行,会导致整个nginx没有记录log了呢?container运行正常,服务能够正常访问,但就是没有记录日志,可以排除nginx.conf配置语法错误,因为语法错误会导致nginx启动不了,也就是nginx运行正常,那些没有日志的产生,是不是没有"write"的权限呢?下面我们要做的就是
docker exec -it frontendContainerId sh
进入到frontend container中,使用"chown"、"chgrp"把对应日志文件目录的用户和用户组改成nginx。好的,接下来,重启container,访问对应服务,在日志文件夹下面,我们看到了新生成的带日期的文件名的日志文件!
如想了解更多,请移步我的博客。
ps: 解决问题就是这么简单流畅,如风少年~
NGINX按天生成日志文件的简易配置的更多相关文章
- Flask log配置,实现按照日期自动生成日志文件
Flask自带了logger模块,用来方便程序员群众记录日志,这里粘贴出来的是一段代码,用来初始化日志各项配置参数,并根据日期自动生成日志文件. #log配置,实现日志自动按日期生成日志文件def m ...
- log4j自动生成日志文件配置
生成文件到默认位置: #生成日志文件 #log4j.appender.systemFile=org.apache.log4j.RollingFileAppender #按天生成 log4j.appen ...
- 使用log4net生成日志文件
(一)使用log4net生成日志文件 1.引入log4net.dll 1.1 Nuget安装 或 http://logging.apache.org/log4net/下载log4net的源代码,编 ...
- SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出
写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...
- 【spring boot logback】日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割
原本的日志文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan ...
- log4Net不能成功生成日志问题(关于配置错误)
log4Net不能成功生成日志问题(关于配置错误) 调试发现问题原因在于 Log4Net IsInfoEnabled 一直为 false,返回的对象中所有 IsXXX 一直为false,这个问题的原 ...
- (一)使用log4net生成日志文件
1.引入log4net.dll 1.1 Nuget安装 或 http://logging.apache.org/log4net/下载log4net的源代码,编译后把log4net.dll引入项目. 2 ...
- log4j不生成日志文件的问题
直接看我的注解吧 注意地址的斜杠,还有地址别写什么相对地址了,这包太老了,服务器update一下兼容问题就出来了. #第一个参数定义达到什么程度就输出 第二第三....第N 定义输出的类型 #debu ...
- windows编程按小时生成日志文件
这是一个简单的日志记录方法,为了避免单个日志文件过大,所以每个小时生成一个新的日志文件 注意:g_pLogPath 可以带路径,但是必须手动创建好路径,保证目录存在.而且要详细到log文件名,不能带后 ...
随机推荐
- (二)php的常量和变量
[php在命令行下接收参数] 如果在命令行调试php,传入的参数通过$argv获取,注意其中包含了文件名这一个元素,数组中元素的个数通过$argc获取. [可变变量] 指的是变量的名称可变,变量的标识 ...
- TCP的定时器系列 — SYNACK定时器
主要内容:SYNACK定时器的实现,TCP_DEFER_ACCPET选项的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 在上一篇博客中,已经连带 ...
- OJ题:将一个字符串顺序翻转
题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串. 之前写过这样的一个程序,用位运算的方法去操作指针,但是那样的方法未免就有点复杂啦,不如用以下这种,简单明了. 程序如下: #i ...
- [Django高级]理解django中的中间件机制和执行顺序
原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...
- Django介绍、安装配置、基本使用、Django用户注册例子
Django介绍 Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站 DjangoMTV的思想 没有controller ...
- Google地球查看香港地形
12月1号要去香港.为此需要先了解一下香港的情况.以前只知道用Google地球看别人照的照片(或者是全景照),这次无意间发现了它一个很强大的功能:立体的呈现一个地区的地形.对于像香港这样的多山地区来说 ...
- 《java入门第一季》之类小案例(模拟用户登录)
首先是做一个用户登录的小案例.在此基础上加入其它逻辑. import java.util.Scanner; /* * 模拟登录,给三次机会,并提示还有几次.如果登录成功,就可以玩猜数字小游戏了. * ...
- C++11特性 - Smart Pointers 智能指针
已经有成千上万的文章讨论这个问题了,所以我只想说:现在能使用的,带引用计数,并且能自动释放内存的智能指针包括以下几种: unique_ptr: 如果内存资源的所有权不需要共享,就应当使 ...
- Cursor类取出数据
重点是要调用 moveToFirst(); long id=intent.getLongExtra("id",0); Cursor cr =dbh.selectDataById(i ...
- Java 条形码生成(一维条形码)
utl:http://mianhuaman.iteye.com/blog/1013945 在这里给大家介绍一个java 生成条形码 jbarcode.jar 生成条形码 支持EAN13, EAN8, ...