在Django,我到处都有记录器,目前有硬编码的名字.
对于模块级日志记录(即,在视图函数模块中),我有这样做的冲动.
log = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)
对于类级别的日志记录(即,在类__init__方法中),我有这样做的冲动.
self.log = logging.getLogger("%s.%s" % (
self.__module__, self.__class__.__name__))
Run Code Online (Sandbox Code Playgroud)
在我解决几十次事件之前,我正在寻找第二意见getLogger("hard.coded.name").
这会有用吗?还有其他人用同样缺乏想象力的方式命名他们的记录器吗?
此外,我应该分解并为此日志定义编写类装饰器吗?
我是Python日志的新手,我可以很容易地看到它对我提出的家庭酿造解决方案的优越性.
我似乎无法找到答案的一个问题:如何基于每个方法/函数压制记录消息?
我的假设模块包含一个函数.在我开发时,日志调用是一个很好的帮助:
logging.basicConfig(level=logging.DEBUG,
format=('%(levelname)s: %(funcName)s(): %(message)s'))
log = logging.getLogger()
my_func1():
stuff...
log.debug("Here's an interesting value: %r" % some_value)
log.info("Going great here!")
more stuff...
Run Code Online (Sandbox Code Playgroud)
当我在'my_func1'上完成工作并开始处理第二个函数'my_func2'时,来自'my_func1'的日志消息开始从"有用"变为"杂乱".
是否存在单行魔术语句,例如'logging.disabled_in_this_func()',我可以将其添加到'my_func1'的顶部以禁用'my_func1'中的所有日志记录调用,但仍然在所有其他函数/方法中保留日志记录调用不变?
谢谢
linux,Python 2.7.1
我正在使用带有日志记录模块的Python,并且想将socket.hostname()添加到每条日志消息中,我必须在每条消息中运行此查询并且不能使用
name = socket.hostname()
Run Code Online (Sandbox Code Playgroud)
然后用名称记录格式
我正在研究这个使用日志过滤器的示例,但我这里需要的不是过滤器,而是对每个日志消息的简单操作。
我怎样才能达到想要的结果?
是否可以在日志记录配置文件中添加/使用过滤器?例如,以下代码是否有等效的设置?
import logging
# Set up loggers and handlers.
# ...
class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno == self.level
logFileHandler.addFilter(LevelFilter(logging.DEBUG))
Run Code Online (Sandbox Code Playgroud)
用于logging.conf中的处理程序
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=format_01
args=(sys.stdout,)
Run Code Online (Sandbox Code Playgroud)
我们可以像处理程序一样在配置文件(logging.conf)中为上面的Python代码编写日志过滤器吗?(Python代码仅作为示例)
如何在debug = True中运行django而不受sql日志记录的轰炸?
被迫眯着眼睛看着所有这些噪音使我很难看到我的调试信息....
[Thu Jul 28 19:56:27 2011] [error] DEBUG:(0.000) SELECT `django_session`.`session_key`, `django_session`.`session_data`, `django_session`.`expire_date` FROM `django_session` WHERE (`django_session`.`session_key` = foobar AND `django_session`.`expire_date` > 2011-07-28 19:56:27 ); args=('foobar', u'2011-07-28 19:56:27')
[Thu Jul 28 19:56:27 2011] [error] DEBUG:(0.000) SELECT `Users`.`id`, `Users`.`auth_id`, `Users`.`username`, `Users`.`pwhash`, `Users`.`first_name`, `Users`.`last_name`, `Users`.`email`, `Users`.`notes`, `Users`.`force_password_change`, `Users`.`deleted`, `Users`.`deleted_username` FROM `Users` WHERE (`Users`.`deleted` = False AND `Users`.`id` = 2 ); args=(False, 2)
[Thu Jul 28 19:56:27 2011] [error] DEBUG:(0.000) SELECT `Auths`.`id`, `Auths`.`developer_id`, `Auths`.`application_id` FROM `Auths` WHERE `Auths`.`id` = 2 ; …Run Code Online (Sandbox Code Playgroud) 我想扩展现有的logging.LEVEL机制,以便我可以选择在不同的日志记录级别(例如 、 等)之间切换DEBUG,INFO同时还为每个级别ERROR定义。depth
例如,假设日志记录级别设置为logging.DEBUG。所有log.DEBUG()呼叫都将可见。
log.debug('Limit event has occurred.')
Run Code Online (Sandbox Code Playgroud)
所以我得到:
[2016-10-08 10:07:29,807] <__main__> {myApp:test_condition_info:93} (DEBUG) Limit event has occurred.
Run Code Online (Sandbox Code Playgroud)
我所追求的是将额外的深度级别传递给调用log.debug(),以便我可以控制消息中打印的详细信息量DEBUG,而不是完全启用或禁用调试级别,而是控制调试消息将携带多少信息。因此,在所有情况下,我们都会看到调试消息,但在某些情况下,它不太详细,并且在某些情况下包含更多信息。
例如:
log.debug('Limit event has occurred.', verbosity=1)
log.debug('The following user has caused the limit event: %s' % (user), verbosity=3)
log.debug('The following files have been affected: %s' % [list_of_files], verbosity=7)
Run Code Online (Sandbox Code Playgroud)
因此,当日志记录级别设置为DEBUG且全局详细程度设置为 时,GLOBAL_VERBOSITY=1我们将得到以下结果:
[2016-10-08 10:07:29,807] <__main__> {myApp:test_condition_info:93} …Run Code Online (Sandbox Code Playgroud)