Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python';s旋转文件处理程序_Python_Logging - Fatal编程技术网

python';s旋转文件处理程序

python';s旋转文件处理程序,python,logging,Python,Logging,我试图创建一个日志系统,将特定日志排序到类似于:logs//.log的目录模式中。到目前为止,它还没有成功。我想看看是否可以在日志配置文件中实现此功能,而不是通过编程为每个案例创建一个 { "version": 1, "disable_existing_loggers": false, "formatters": { "simple": { "format": "%(asctime)s - %(name)s <%(leveln

我试图创建一个日志系统,将特定日志排序到类似于:
logs//.log
的目录模式中。到目前为止,它还没有成功。我想看看是否可以在日志配置文件中实现此功能,而不是通过编程为每个案例创建一个

{
    "version": 1,
    "disable_existing_loggers": false,
    "formatters": {
        "simple": {
            "format": "%(asctime)s - %(name)s <%(levelname)s>: %(message)s"
        }
    },

    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": "DEBUG",
            "formatter": "simple",
            "stream": "ext://sys.stdout"
        },

        "info_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "INFO",
            "formatter": "simple",
            "filename": "logs/%(name)s/info.log",
            "maxBytes": "10485760",
            "backupCount": "20",
            "encoding": "utf8"
        },

        "error_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "ERROR",
            "formatter": "simple",
            "filename": "logs/%(name)s/errors.log",
            "maxBytes": "10485760",
            "backupCount": "20",
            "encoding": "utf8"
        }
    },

    "loggers": {
        "my_module": {
            "level": "ERROR",
            "handlers": ["console"],
            "propagate": "no"
        }
    },

    "root": {
        "level": "INFO",
        "handlers": ["console", "info_file_handler", "error_file_handler"]
    }
}
{
“版本”:1,
“禁用现有日志记录器”:false,
“格式化程序”:{
“简单”:{
“格式”:“%(asctime)s-%(名称)s:%(消息)s”
}
},
“处理程序”:{
“控制台”:{
“类”:“logging.StreamHandler”,
“级别”:“调试”,
“格式化程序”:“简单”,
“流”:ext://sys.stdout"
},
“信息文件处理程序”:{
“类”:“logging.handlers.RotatingFileHandler”,
“级别”:“信息”,
“格式化程序”:“简单”,
“文件名”:“logs/%(name)s/info.log”,
“maxBytes”:“10485760”,
“备份数量”:“20”,
“编码”:“utf8”
},
“错误文件处理程序”:{
“类”:“logging.handlers.RotatingFileHandler”,
“级别”:“错误”,
“格式化程序”:“简单”,
“文件名”:“logs/%(name)s/errors.log”,
“maxBytes”:“10485760”,
“备份数量”:“20”,
“编码”:“utf8”
}
},
“伐木工人”:{
“我的单元”:{
“级别”:“错误”,
“处理程序”:[“控制台”],
“传播”:“否”
}
},
“根”:{
“级别”:“信息”,
“处理程序”:[“控制台”、“信息文件处理程序”、“错误文件处理程序”]
}
}

使用上面显示的配置,我得到
ValueError:无法配置处理程序u'error\u file\u handler':[Errno 2]没有这样的文件或目录:u'…/logs/%(name)s/errors.log'
。那么,我采用的方法不支持将变量名作为文件名的一部分?我是否仅限于以编程方式创建日志对象,或者在Python的默认日志库中是否有这样做的方法?我知道我可以为每个单独的类创建特定的记录器,但我真的很感激不需要自己为每个案例手动写出每个记录器,并将日志配置保持为唯一的案例。如果可以的话,我也想使用配置文件。

日志配置系统允许您指定要创建的处理程序,但它的设计不允许您为处理程序创建模板,这似乎是您想要的

我不知道“name”是否指的是记录器名称,考虑到日志记录级别、记录器和处理程序的工作方式,您的方案似乎没有多大意义。即使您为日志文件使用了一个常量名称(帮助您解决当前的问题),您也会在
INFO.log
中同时出现
错误和
INFO
级别的消息(以及
警告
消息)

我不建议尝试为每个记录器和每个级别设置单独的日志文件-根据我的经验,这不是一种特别有用的操作模式