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

1 map $time_iso8601 $logdate {
2  ‘~^(?\d{4}-\d{2}-\d{2})‘ $ymd; default ‘nodate‘;
3 }
4
5 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: 解决问题就是这么简单流畅,如风少年~

原文地址:https://www.cnblogs.com/wfsovereign/p/9024626.html

时间: 2024-11-09 10:43:47

NGINX按天生成日志文件的简易配置的相关文章

Flask log配置,实现按照日期自动生成日志文件

Flask自带了logger模块,用来方便程序员群众记录日志,这里粘贴出来的是一段代码,用来初始化日志各项配置参数,并根据日期自动生成日志文件. #log配置,实现日志自动按日期生成日志文件def make_dir(make_dir_path): path = make_dir_path.strip() if not os.path.exists(path): os.makedirs(path) return pathlog_dir_name = "logs"log_file_name

【spring boot logback】日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割

原本的日志文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>logback</contextName> <!--定义日志文件的存储地址 勿在 LogBac

log4j不生成日志文件的问题

直接看我的注解吧 注意地址的斜杠,还有地址别写什么相对地址了,这包太老了,服务器update一下兼容问题就出来了. #第一个参数定义达到什么程度就输出 第二第三....第N 定义输出的类型 #debug<info<worn<error log4j.rootLogger=debug, stdout ,R ### direct log messages to stdout ### #stdout和日志台绑定 log4j.appender.stdout=org.apache.log4j.Con

(一)使用log4net生成日志文件

1.引入log4net.dll 1.1 Nuget安装 或 http://logging.apache.org/log4net/下载log4net的源代码,编译后把log4net.dll引入项目. 2.配置log4net.config 2.1 在Web.config文件中进行添加configSections的节点 <configSections> <section name="log4net" type="log4net.Config.Log4NetConf

C# 开发 Windows 服务 使用Log4net 组件 不能生成日志文件

使用VS2012开发Windows服务,需要使用Log4net日志组件记录业务情况,但是始终生成不了日志文件. 1 /// <summary> 2 /// 入口方法 3 /// </summary> 4 /// <param name="args">参数</param> 5 public static void Main(string[] args) 6 { 7 // 加载Log4net模块 8 LogHelper.SetConfig(&

windows编程按小时生成日志文件

这是一个简单的日志记录方法,为了避免单个日志文件过大,所以每个小时生成一个新的日志文件 注意:g_pLogPath 可以带路径,但是必须手动创建好路径,保证目录存在.而且要详细到log文件名,不能带后缀,后缀默认为.log 后缀名需要在createLogFileName()中修改,可以改为.txt log.h #pragma once #define WRITE_LOG_ENABLE //启用日志打印 #include <string> #include <Windows.h> #

Spring boot启动后没有生成日志文件问题排错

我的配置是: logging.file.name=spring-boot.log logging.file.path=D:/log/ 系统启动后日志文件没有生成 原因:一开始以为这两个属性是配合着使用的,所以两个都配置了,结果找不到生成的日志文件 经过多方查证,后来发现,这两个属性只需要配一个就行了 如果配置了: logging.file.name=D:/log/spring-boot.log #在D:/log/目录下生成一个日志文件spring-boot.log 则不需要配置: logging

[转]如何禁止 IIS 在 C:\Windows\System32\LogFiles\HTTPERR 中生成日志文件

1. 在注册表 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters 中新建 dword 值:EnableErrorLogging,设置值为 0. 2. 在命令行中分别运行以下命令运行: net stop http net start http iisreset 3. 可改变日志文件的存储位置,同样在 Parameters 中新建字符串值:ErrorLoggingDir,设置值为新的存储路径,同样需要重启 HTT

批处理自动备份并生成日志文件

在windows里新建一个计划任务定期去执行以下脚本,脚本会自动执行备份任务,并记录执行结果到日志文件.(执行时间,备份是否成功) @echo off @echo ************************************************************ @echo. @echo Backing up data files ,Please do not close this Window! @echo. @echo *************************