问题很简单,就是Handler的意思。我知道在英语中Handler是一种Handler。但我无法理解它背后的概念,如果它遵循某种设计模式或类似的东西。无论是同步还是异步等。
我的问题来自使用Python logging。其中可以配置多个Handler将日志发送到不同的站点。
'handlers': {
'wsgi': {
'class': 'logging.StreamHandler',
'stream': 'ext://flask.logging.wsgi_errors_stream',
'formatter': 'default'
},
'info_file_handler': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/info.log',
'formatter': 'default',
'maxBytes': 485760,
'backupCount': 5,
'encoding': 'utf8'
}
如果有人有很好的解释和例子,欢迎。处理程序上没有标签(由于声誉低,我无法创建它)。
A
Handler
是一个相当模糊的概念,因为它没有明确的定义,也没有明确的定义,也没有应该如何构建,只说Python,在文档中没有精确的定义,并且该术语Handler
用于许多类和对象无需指定单一模式,我们最多可以概括您已经知道的内容,即 aHandler
是“处理程序”,能够“接收”事件、消息等并根据它采取行动的东西。但是在模块的上下文中,
logging
我们可以指定比 a 多一点的内容Handler
,让我们先看看信息日志是如何工作的:Logger
一个对象开始,我们可以在脚本执行期间使用该对象定义多个要“记录”的消息。warning()
、error()
等log()
。他们最终都调用了一个内部函数_log()
。_log()
构造我们要保存的“记录”,最后调用callHandlers()
.callHandlers()
,顾名思义,遍历之Handlers
前配置的列表并调用方法handle()
。重要的是要注意,
Logger
我们从“哪里”和“如何”中抽象出消息将被记录,这就是为什么我们有Handler
,具有一些特征:logging.Handler
logging.Handler
有一个基本的方法就是handle()
,都Handlers
继承这个方法,最后又调用了另外一个,在这个类中没有实现,叫做emit()
.emit()
它是每个Handler
继承自应该实现的方法,logging.Handler
它封装了处理日志记录、将其保存在特定文件中、通过网络发送、将其注册为系统事件等的最终逻辑。emit()
最终Handler
,他们是管理“何处”和“如何”记录消息的人。在这种情况下,我们可以说 a
Handler
是一个负责特定任务的对象,它也有一个特定的接口,由一个“委托”给它的分层上级对象调用,它是工作的一部分,要么用于 a委派原因、职责或促进功能的可扩展性。作为一个例子,我添加了
Handler
最基本和最基本的 el的定义NullHandler
:你可以看到只有前面提到的方法
handle()
和 被定义(空白)emit()
。注意: 这createLock()
是重新定义标准锁定机制Handler
,因为在这种情况下不需要任何类型的锁定。