python - 覆盖默认打印方法以与 python 的日志记录模块一起使用
问题描述
我正在尝试print
用我自己的版本覆盖全局方法。我尝试使用 python 的全局字典覆盖该方法。但它会引发错误。
import logging
format = '%(asctime)s %(message)s %(name)s - %(levelname)s | %(service)s - %(m)s'
formatter = logging.Formatter(format)
logging.basicConfig(format=format)
file_handler = logging.FileHandler("app.log")
logger = logging.getLogger('root-logger')
logger.addHandler(file_handler)
file_handler.setFormatter(formatter)
def p():
logger.warning("hello")
globals()['print'] = p
print()
我得到的错误是:
--- Logging error ---
Traceback (most recent call last):
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 1025, in emit
msg = self.format(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 869, in format
return fmt.format(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 611, in format
s = self.formatMessage(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 580, in formatMessage
return self._style.format(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 422, in format
return self._fmt % record.__dict__
KeyError: 'service'
Call stack:
File "test.py", line 24, in <module>
print()
File "test.py", line 18, in p
logger.warning("hello")
Message: 'hello'
Arguments: ()
--- Logging error ---
Traceback (most recent call last):
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 1025, in emit
msg = self.format(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 869, in format
return fmt.format(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 611, in format
s = self.formatMessage(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 580, in formatMessage
return self._style.format(record)
File "/Users/pc/anaconda3/envs/spider/lib/python3.7/logging/__init__.py", line 422, in format
return self._fmt % record.__dict__
KeyError: 'service'
Call stack:
File "test.py", line 24, in <module>
print()
File "test.py", line 18, in p
logger.warning("hello")
Message: 'hello'
Arguments: ()
如何覆盖默认打印方法,以便我可以在整个应用程序中使用它与 python 的日志记录模块同步?
解决方案
推荐阅读
- javascript - 在 React 组件中渲染 JSON 数组
- opengl-es - 为什么没有 glBindBuffer 的 glVertexAttribPointer 也可以工作?
- python - PyQt5 QFrame 的实际大小
- selenium - 使用 Selenium webdriver 自动化 IE 时无法从全屏模式切换到最大化模式
- powershell - 如何从 HPC 集群获取完整的作业名称
- c# - 聚类非矩阵字符串数组
- android - NOT NULL 约束失败:Facture.Mode
- r - 如何删除列中的可变字符?
- java - 将编辑文本值从片段传递到活动
- c++ - 静态变量在 .dll/.lib 中显示不同的行为