实例选自:openpifpaf/log.py
import logging
LOG = logging.getLogger(__name__) # 获取当前模块名当作此Logger的名字
def configure(args):
# pylint: disable=import-outside-toplevel
from pythonjsonlogger import jsonlogger
from . import __version__ as VERSION
# 此处使用logging的方式是使用Logging日志系统的四大组件
file_handler = logging.FileHandler(args.output + '.log', mode='w') # 创建一个输出到log文件的Handler.
file_handler.setFormatter( # 设置日志输出格式
jsonlogger.JsonFormatter('(message) (levelname) (name) (asctime)'))
stdout_handler = logging.StreamHandler(sys.stdout) # 创建一个输出到控制台的Handler
# basicConfig()函数只用来配置RootLogger.而且因为RootLogger为其他Logger的根Logger,即系统的根logger
# 因此当你使用这个配置后,【其他Logger都会】继承RootLogger的配置,
# 除非其他位置的Logger设置了name,可以有自己的独立设置,从而不继承这个RootLogger
logging.basicConfig(handlers=[stdout_handler, file_handler]) # RootLogger的level默认是WARNING
# logging.warning('Who am I?') # 这样调用其实是在root logger位置输出
log_level = logging.INFO if not args.debug else logging.DEBUG # logging(没有提供名字)会直接设置RootLogger的状态
# 为当前logger设置名称,可对每个模块设置独立的logger,通过name来进行区别.若当前模块没有设置,将与父模块保持一致
logging.getLogger('openpifpaf').setLevel(log_level)
# ############ 不用logging.basicConfig()的话,也可以替换成下面代码,是相同的效果 ###############
# logger = logging.getLogger('openpifpaf') # #创建logger对象
# logger.setLevel(log_level) # 设置logger的日志处理级别
# logger.addHandler(stdout_handler) # 将handler绑定到logger
# logger.addHandler(file_handler)
LOG.info({
'type': 'process',
'argv': sys.argv, # 返回一个list,包含运行程序本身的名字,以及用户输入的命令行中给予的参数
'args': vars(args), # args命名空间的值
'version': VERSION,
'hostname': socket.gethostname(),
})
return log_level
来源:CSDN
作者:小佳AI
链接:https://blog.csdn.net/xiaojiajia007/article/details/104749529