首页 > 其他分享 >gunicorn 自定义日志

gunicorn 自定义日志

时间:2024-07-06 11:09:54浏览次数:7  
标签:console gunicorn 自定义 handlers handler 日志 root

gunicorn 自定义日志

默认情况下,如果只通过errorlogaccesslog参数指定 gunicorn 的日志文件,日志文件会一直增长,最后导致硬盘占用过大和检查日志不方便。因此需要自定义配置滚动日志保存。

配置文件

直接在 gunicorn 的配置文件 gunicorn_conf.py 中添加logconfig_dict配置项

import multiprocessing

bind = '0.0.0.0:8000'
workers = multiprocessing.cpu_count() * 2 + 1
backlog = 2048
debug = False
timeout = 500
daemon = True
pidfile = './logs/gunicorn.pid'
logconfig_dict = {
    'version': 1,
    'disable_existing_loggers': False,
    'root': {'level': 'INFO', 'handlers': ['console']},
    'loggers': {
        'gunicorn.error': {
            'level': 'INFO',
            'handlers': ['error_file'],
            'propagate': False,
            'qualname': 'gunicorn.error'
        },
        'gunicorn.access': {
            'level': 'INFO',
            'handlers': ['access_file'],
            'propagate': False,
            'qualname': 'gunicorn.access'
        }
    },
    'handlers': {
        # 必须配置 console handler,root logger 默认使用 console handler
        # 或者在 root 中指定自定义的 handler
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'generic',
            'stream': 'ext://sys.stdout'
        },
        'error_file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': './logs/gunicorn.error.log',
            'maxBytes': 5 * 1024 * 1024,
            'backupCount': 5,
            'formatter': 'generic'
        },
        'access_file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': './logs/gunicorn.access.log',
            'maxBytes': 5 * 1024 * 1024,
            'backupCount': 5,
            'formatter': 'generic'
        },
    },
    'formatters': {
        'generic': {
            'format': '%(asctime)s [%(process)d] [%(levelname)s] %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S %z',
            'class': 'logging.Formatter'
        }
    }
}

问题

将 19 版本的配置直接复制到 22 版的 gunicorn 中使用时,出现Error: Unable to configure root logger报错。
通过对比 gunicorn 的CONFIG_DEFAULTS配置,发现在老版本中不需要考虑 root logger 的问题,在新版本中,gunicorn 会有一个默认的 root logger,并且使用的 handler 是 console,如果在 handlers 中没有配置就会导致报错。
解决方法:

  1. 在 handler 中配置 console handler
  2. 增加配置 root logger 配置项,并指定已有的 handler

标签:console,gunicorn,自定义,handlers,handler,日志,root
From: https://www.cnblogs.com/shouwangrenjian/p/18285524

相关文章

  • Redis 清理日志文件的策略
    目录Redis清理日志文件的策略1.Redis日志文件2.日志清理策略定期归档压缩归档文件设置日志文件大小限制注意事项结论Redis清理日志文件的策略在使用Redis时,日志文件可能会不断增长,占用磁盘空间。为了保持良好的系统性能和合理利用磁盘空间,我们需要实施一定的......
  • ELK日志分析系统概述及部署
    目录1.ELK1.1ELK简介1.2ELK组件1.3ELK的优点1.4 为什么要使用ELK?1.5 完整日志系统基本特征1.6ELK的工作原理:2. 部署ELK日志分析系统2.1 部署Elasticsearch软件2.1.1 安装elasticsearch—rpm包2.1.2 修改elasticsearch主配置文件2.1.3es性能调优参......
  • .NET控制台读取appsettings.json,配置日志
    需要安装nuget包Microsoft.Extensions.Configuration 、Microsoft.Extensions.Configuration.FileExtensions、Microsoft.Extensions.Configuration.Json、NLogusingNLog;usingNLog.Config;usingMicrosoft.Extensions.Configuration;namespaceConsoleApp2{int......
  • 使用AOP和注解对DTO中的字段进行截断——第一次使用AOP和自定义注解的心得
    是骚操作,但是为了应对特殊的需求,实现了通过在方法上应用@TruncateString注解,进入AOP,获得第一个参数中的DTO,然后获取DTO中加了@LimitStringLength注解,将字段修改之后返回。#AOP中要注意的点:AOP由Spring管理,所以要生效的话需要加上@Component注解可以把注解绑定到一个方法上,然后......
  • 使用docker搭建ELK分式日志同步方案
    ELK作为业界最常用日志同步方案,我们今天尝试一下使用docker快速搭建一套ELK方案。ELK使用国内加速源拉取的镜像比较旧,有条件的朋友可以拉取官网的源。elasticsearch作为日志储存库(数据库),kibana的作用通过elasticsearch的API接口调取其中数据作可视化分析,logstash的作用就是将程序......
  • 自定义流程表单开发优势体现在什么地方?
    提质、增效、降本,应该是很多职场办公需要实现的发展目标。那么,应用什么样的软件平台可以实现?低代码技术平台、自定义流程表单开发是目前流行于职场行业中的软件产品,可视化操作界面、够灵活、易维护等优势特点明显,在推进企业实现流程化办公的过程中深受欢迎。一起来了解自自定义流......
  • Springboot自定义数据源DruidDataSource
    1、Druid简介Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。Druid是阿里巴巴开源平台上一个数据库连接池实现,结合了C3P0、DBCP等DB池的优点,同时加入了日志监控。Druid可以很好的监控DB池连接和SQL的执行情况,天生就是针对监控而......
  • WPF自定义控件与样式-自定义按钮(Button)
    一、前言程序界面上的按钮多种多样,常用的就这几种:普通按钮、图标按钮、文字按钮、图片文字混合按钮。本文章记录了不同样式类型的按钮实现方法。二、固定样式的按钮固定样式的按钮一般在临时使用时或程序的样式比较固定时才会使用,按钮整体样式不需要做大的改动。2.1普通按钮-......
  • Linux 文件系统以及日志管理
    一、inode与block1.inode与block详解在文件存储硬盘上,硬盘的最小存储单位叫做“扇区”,每个为512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小......
  • 详解Web应用安全系列(8)不足的日志记录和监控
    在Web安全领域,不足的日志记录和监控是一个重要的安全隐患,它可能导致攻击者能够更隐蔽地进行攻击,同时增加了攻击被检测和响应的难度。以下是对Web攻击中不足的日志记录和监控漏洞的详细介绍。一、日志记录不足的问题日志缺失或不完整关键操作未记录:如用户登录、敏感数据......