以通用方式对Python日志消息进行自定义处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了以通用方式对Python日志消息进行自定义处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1767字,纯文字阅读大概需要3分钟。
内容图文
![以通用方式对Python日志消息进行自定义处理](/upload/InfoBanner/zyjiaocheng/681/fa0b7a675f184d85bf89f0d93949fe9b.jpg)
我正在尝试找出在对Python日志消息进行一些自定义处理的最佳方法,而对我们的代码库的影响最小.
问题是这样的:我们有许多不同的项目记录了很多事情,并且其中可以找到一些AWS密钥.出于安全性要求,我们需要从日志中剥离所有AWS密钥,并且有多种解决方法:
>天真的方法是进入每个项目,并修改每个日志记录调用以手动剥离键.这是最不推荐的方法,因为它将是最手动的方法.
>实现一个提供与日志记录模块相同功能的不同模块(例如info,error,…),并且每个函数定义都将首先应用正则表达式来过滤掉AWS密钥,然后在后台调用实际的日志记录方法.然后,可以将每个项目修改为类似import custom_logging_module的日志记录,并且不需要修改任何日志记录调用.这种方法的缺点是,看起来每个日志记录调用都来自日志中的此模块,因此您无法跟踪消息的来源.
>尚不确定采用哪种格式,但是听起来好像可以实现自定义Logger或LogRecord并在初始化日志记录时对其进行注册.不会有以前方法的问题.
我已经对方法3进行了一些研究,但实际上找不到解决方法.有没有人有经验对日志消息应用一些自定义处理,这些处理将应用于此用例?
解决方法:
只要可以明确标识文本中的键,就可以使用自定义LogRecord类来实现此目的.例如:
import logging
import re
KEY = 'PK_SOME_PUBLIC_KEY'
SECRET_KEY = 'SK_SOME_PRIVATE_KEY'
class StrippingLogRecord(logging.LogRecord):
pattern = re.compile(r'\b[PS]K_\w+\b', re.I)
def getMessage(self):
message = super(StrippingLogRecord, self).getMessage()
message = self.pattern.sub('-- key redacted --', message)
return message
if hasattr(logging, 'setLogRecordFactory'):
# 3.x has this
logging.setLogRecordFactory(StrippingLogRecord)
else:
# 2.x needs monkey-patching
logging.LogRecord = StrippingLogRecord
logging.basicConfig(level=logging.DEBUG)
logging.debug('Message with a %s', KEY)
logging.debug('Message with a %s', SECRET_KEY)
在我的示例中,我假设您可以使用一个简单的正则表达式来发现密钥,但是如果不可行,可以使用一种更复杂的替代方法.
请注意,以上代码应在记录密钥的任何代码之前运行.
内容总结
以上是互联网集市为您收集整理的以通用方式对Python日志消息进行自定义处理全部内容,希望文章能够帮你解决以通用方式对Python日志消息进行自定义处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。