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 防止cherrypy记录访问_Python_Logging_Cherrypy - Fatal编程技术网

Python 防止cherrypy记录访问

Python 防止cherrypy记录访问,python,logging,cherrypy,Python,Logging,Cherrypy,我正在尝试设置一个记录器,以仅捕获我的错误级别消息,但我的记录器似乎总是将INFO:cherrypy.access消息写入我的日志文件,我不希望这样做。我尝试设置log.error\u文件global,并使用标准的python日志模块logging.basicConfig(filename='error.log',filemode='w',level=logging.error),但即使我将阈值指定为错误级别消息,我仍然会将这些信息级别消息写入日志文件。有什么方法可以防止这种情况发生吗?似乎IN

我正在尝试设置一个记录器,以仅捕获我的错误级别消息,但我的记录器似乎总是将
INFO:cherrypy.access
消息写入我的日志文件,我不希望这样做。我尝试设置
log.error\u文件
global,并使用标准的python日志模块
logging.basicConfig(filename='error.log',filemode='w',level=logging.error)
,但即使我将阈值指定为错误级别消息,我仍然会将这些信息级别消息写入日志文件。有什么方法可以防止这种情况发生吗?

似乎
INFO
级别的日志是针对
cherrypy.access
而来的。据-

您应该在全局级别或每个应用程序(见下一步)设置这些值,但通常不能同时设置这两个值

log.screen:将此设置为True,将“错误”和“访问”消息打印到标准输出。 log.access_file:将此文件名设置为要写入“access”消息的绝对文件名。 log.error\u文件:将此文件名设置为要写入“错误”消息的绝对文件名

您还应该尝试设置
log.access\u文件
(类似于
log.error\u文件
)。或者您可以为此添加一个处理程序,例如-

from logging import handlers
fname = getattr(log, "rot_access_file", "access.log") #The log for access messsages.
h = handlers.TimedRotatingFileHandler(fname, when='midnight')
h.setLevel(logging.DEBUG)
h.setFormatter(_cplogging.logfmt)
log.access_file = ""
log.access_log.addHandler(h)

我可以通过设置自己的设置来禁用访问邮件:

logging.basicConfig(filename='error.log',filemode='w',level=logging.error)

然后设置:


cherrypy.log.access\u log.propagate=False

我也遇到了这个问题,我已经解决了。所以把它贴在这里,希望它能帮助有类似问题的人

CherryPy版本14.2.0

要禁用
access
日志记录,只需将空字符串保留为
'log.access_file':''

下面我发布了我的自定义日志记录配置
logging\u configuration.py
,我在设置中添加了自定义日志记录程序:

# logger settings
LOGGER_NAME = 'custom'
_LOGGER_HANDLER = 'cherrypy_' + LOGGER_NAME
_MULTIMEDIA_LOGFILE = LOGGER_NAME + '.log'
_ACCESS_LOGFILE = 'access.log'
_ERRORS_LOGFILE = 'errors.log'

LOG_CONF = {
    'version': 1,
    'formatters': {
        'void': {
            'format': ''
        },
        'standard': {
            'format': '%(asctime)s (%(module)15s:%(lineno)2s) [%(levelname)s] %(message)s'
        },
    },
    'handlers': {
        _LOGGER_HANDLER: {
            'level':'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'formatter': 'standard',
            'filename': _MULTIMEDIA_LOGFILE,
            'maxBytes': 10485760,
            'backupCount': 20,
            'encoding': 'utf8'
        },
        'cherrypy_access': {
            'level':'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'formatter': 'void',
            'filename': _ACCESS_LOGFILE,
            'maxBytes': 10485760,
            'backupCount': 20,
            'encoding': 'utf8'
        },
        'cherrypy_error': {
            'level':'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'formatter': 'void',
            'filename': _ERRORS_LOGFILE,
            'maxBytes': 10485760,
            'backupCount': 20,
            'encoding': 'utf8'
        },
    },
    'loggers': {
        LOGGER_NAME: {
            'handlers': [_LOGGER_HANDLER],
            'level': 'INFO',
            'propagate': False
        },
        'cherrypy.access': {
            'handlers': ['cherrypy_access'],
            'level': 'INFO',
            'propagate': False
        },
        'cherrypy.error': {
            'handlers': ['cherrypy_console', 'cherrypy_error'],
            'level': 'INFO',
            'propagate': False
        },
    }
}
我如何使用它

import cherrypy
from docs import logging_configuration as loggingconf

if __name__ == '__main__':
    cherrypy.config.update(
        {
            'server.socket_host': settings.HOST,
            'server.socket_port': settings.PORT,
            'log.screen': True,
        }
    )

    cherrypy.engine.unsubscribe('graceful', cherrypy.log.reopen_files)
    logging.config.dictConfig(loggingconf.LOG_CONF)  # add it here

    config = {
        '/': {
            'tools.sessions.on': True,
            'tools.staticdir.on': True,
            'tools.staticdir.dir': settings.PROJECT_ROOT
        }
    }
    cherrypy.quickstart(CampPage(), '/', config)
要登录cherrypy_custom.log,请使用:

logger = logging.getLogger(loggingconf.LOGGER_NAME)

logger.info('Hello There...')  # this line will be written into cherrypy_custom.log

要禁用访问日志,请将
\u access\u FILELOG=''
设置为空字符串

将CherryPy日志配置为裸
日志
不是很实际。确保您了解CherryPy配置及其环境(请参阅)。如果你坚持下去,你会对CherryPy
日志记录
树和扩展它的方法有很好的解释。
logger = logging.getLogger(loggingconf.LOGGER_NAME)

logger.info('Hello There...')  # this line will be written into cherrypy_custom.log