如何使用RotatingFileHandler设置日志?
我有一个分析程序(用的是python 2.7),我想在里面加一些日志记录。我的目标是在每个函数的开始和结束时添加一些信息性消息,这样我就能看到每个函数运行了多长时间。下面是一个简化的版本。当我运行这个例子时,我指定的日志文件里什么都没有写入。我希望能把带时间戳的消息写到那个文件里。
import numpy as np
import pandas as pd
import logging
import logging.handlers
def perform_process():
setup_logging()
baseline()
calculations()
def setup_logging():
logging.basicConfig(level = logging.INFO)
global logger
global handler
global formatter
logger = logging.getLogger(__name__)
handler = logging.handlers.RotatingFileHandler('C:\\Users\\perform_log.log', maxBytes=2000, backupCount=5)
handler.setLevel(logging.info)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info('I am logging')
def baseline():
logger.info('start baseline function')
baseline_df = pd.DataFrame(np.random.randn(10,4), columns=['a','b','c','d'])
global output_df
output_df = baseline_df
def calculations():
print output_df.head()
perform_process()
当我运行这个文件时,控制台输出是这样的:
a b c d
0 -0.686909 0.279976 0.219521 -0.027359
1 -0.718949 0.714682 1.202500 0.935868
2 0.454883 1.205500 0.079626 -1.370491
3 -0.743507 -1.353939 0.677011 -0.847376
4 -0.464742 1.034433 -0.779324 0.930626
[5 rows x 4 columns]
INFO:__main__:I am logging
INFO:__main__:start baseline function
但是,我指定的日志文件里没有任何数据。我的日志设置有什么问题,导致消息没有按照我指定的格式写入到那个日志文件里呢?
关于上面的输出,为什么 'print output_df.head()' 在两个日志调用之前就执行了?我希望能看到日志消息按照执行的顺序排列。
1 个回答
2
在这一行
handler.setLevel(logging.info)
logging.info
返回的是一个函数,而不是一个级别。你需要把它改成 logging.INFO
(注意 info 是大写的)