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文件名,不能带后 ...
随机推荐
- ios swift 实现饼状图进度条,swift环形进度条
ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...
- Socket编程实践(8) --Select-I/O复用
五种I/O模型介绍 (1)阻塞I/O[默认] 当上层应用App调用recv系统调用时,如果对等方没有发送数据(Linux内核缓冲区中没有数据),上层应用Application1将阻塞;当对等方发送了数 ...
- 【leetcode81】Product of Array Except Self
题目描述: 给定一个长度为n的整数数组Array[],输出一个等长的数组result[],这个输出数组,对应位置i是除了Array[i]之外,其他的所有元素的乘积 例如: given [1,2,3,4 ...
- VC和GCC静态变量析构顺序不同
VC和GCC静态变量析构顺序不同(金庆的专栏)静态变量析构顺序正常情况下是构造的反序.但是VC对DLL中的静态变量好像是需等待DLL卸载时再析构,表现为主程序中的静态变量先析构,DLL中的静态变量后析 ...
- (三十八)从私人通讯录引出的细节II -数据逆传 -tableView点击 -自定义分割线
项目中的警告是不会影响app发布的,例如引入第三方类库很容易引入警告. 细节1:跳转的数据传递. prepareForSegue: sender: 方法是在执行segue后,跳转之前调用这个方法,一般 ...
- python字典作为统计记录工具
1.python 利用字典作为计数项,统计指定项的个数 #!/usr/bin/python ta={} key = "test" if not key in ta: ta[ ...
- python的w+到底是什么
python 文件处理的打开方式有很多种, os.mknod("test.txt") 创建空文件 fp = open("test.txt",w) 直接打开一个文 ...
- EBS Concurrent Manager(并发管理器)异常处理[final]
来自:http://blog.itpub.net/35489/viewspace-742191/ 有时候我们在通过 adstpall.sh 关闭应用后,然后再使用adstrtal.sh开启.发现并发 ...
- Spring BeanFacoty doCreateBean方法分析
上一篇,我们分析到了doCreateBean,现在继续: 先看看时序图 protected Object doCreateBean(final String beanName, final RootB ...
- Android开发你不知道的TIPS
1.Space space是Android 4.0中新增的一个控件,它实际上可以用来分隔不同的控件,其中形成一个空白的区域.这是一个轻量级的视图组件,它可以跳过Draw,对于需要占位符的任何场景来说都 ...