首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止cherrypy登录访问

防止cherrypy登录访问
EN

Stack Overflow用户
提问于 2015-07-28 23:53:43
回答 3查看 1.1K关注 0票数 2

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-29 17:26:05

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

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

然后设置:

cherrypy.log.access_log.propagate = False

票数 1
EN

Stack Overflow用户

发布于 2015-07-29 02:25:17

似乎INFO级别的日志将用于cherrypy.access。根据文档的说法-

您应该在全局级别或每个应用程序上设置这些值(请参见下一个),但通常不能同时设置两者。 log.screen:将此设置为True,以便将“error”和“access”消息打印到stdout。log.access_file:将其设置为一个绝对文件名,您希望在其中写入“访问”消息。log.error_file:将其设置为一个绝对文件名,在该文件名中需要写入“错误”消息。

您还应该尝试设置log.access_file (类似于log.error_file)。或者你可以为此添加一个处理程序,例如-

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2018-04-25 19:30:34

我也有这个问题,我想明白了。因此,在这里张贴它,并希望它可以帮助人们有类似的问题。

CherryPy 14.2.0版

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

代码语言:javascript
复制
if __name__ == '__main__':
    cherrypy.config.update(
        {
            'server.socket_host': settings.HOST,
            'server.socket_port': settings.PORT,
            'log.screen': True,
            'log.access_file': '',
            'log.error_file': ''
        }
    )

    config = {
        '/': {
            'tools.sessions.on': True,
            'tools.staticdir.on': True,
            'tools.staticdir.dir': settings.PROJECT_ROOT
        }
    }

下面我发布了我的自定义日志配置logging_configuration.py,我在设置中添加了自定义记录器:

代码语言:javascript
复制
# 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
        },
    }
}

我是怎么用的?

代码语言:javascript
复制
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,请使用:

代码语言:javascript
复制
logger = logging.getLogger(loggingconf.LOGGER_NAME)

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

若要禁用访问日志,请将_ACCESS_FILELOG = ''设置为空字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31689040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档