背景
起因是这次的项目用thrift来连接算法(python)和业务逻辑(java),因此有必要在python中添加日志来记录传入的参数。这样,当算法端没有正确响应时,就能方便地排查原因。
简易版实现
首先,我在google里面找到了官方的HOWTO文档资料。具体文档见参考资料1.
如何将日志落成日志文件?
import logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)
logging.debug('this message should go to the log file')
logging.info('so should this')
logging.warning('and this, too')
运行上面的代码,在本地就会出现example.log的文件了。看起来很简单,但是需要进一步了解如何在项目中使用。
进阶版实现
知识点
然后我在medium上找到了一篇博客来看。博客中提到,配置日志只需要三个零件:一个logger对象——官方的logger工具
一个formatter——告诉logger要输出成什么样的格式
一个handler——设置logger输出到文件还是打印到控制台
代码实现
我想实现的功能很简单,每次调用print_name(name)函数时,都会把传入的参数name记录到日志里。
依照这篇博客,我写了两个.py文件:一个用来存放对logger的配置,
另一个用来实现功能模块,并在该模块中调用logger,实现记录日志的功能。
第一个文件名为logging_config.py, 内容如下:
import logging
class Config():
# creating a logger对象
logger = logging.getLogger('mylogger')
# define the default level of the logger
logger.setLevel(logging.INFO)
# creating a formatter
formatter = logging.Formatter( '%(asctime)s|%(levelname)s->%(message)s' )
# creating a handler to log on the filesystem
file_handler=logging.FileHandler('mylogfile.log')
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.INFO)
# adding handlers to our logger
logger.addHandler(file_handler)
#logger.info('this is a log message...')
def get_config(self):
return self.logger
第二个文件名为test_module.py, 内容如下:
import logging_config
logger = logging_config.Config().get_config()
def print_name(name):
logger.info(name)
print(name)
接下来,在console里进行如下操作:
import test_moduletest_module.print_name('Nicole')
test_module.print_name('Duoduo')test_module.print_name('Dabao')
在控制台会相应地打印这三个名字。 打开这两个文件所在的文件夹,会发现多了一个mylogfile.log的文件,用记事本打开,里面的内容为:日志内容
参考资料