import logging
from logging.handlers import TimedRotatingFileHandler
def setup_log():
# 定义日志输出格式
fmt_str = '%(asctime)s[level-%(levelname)s][%(name)s]:%(message)s'
logging.basicConfig(level=logging.INFO)
# when可设置月、日、时、分、秒等; interval: n个when更新一次; backupCount: 保留m个文件
files_handle = TimedRotatingFileHandler(path_log, when='S', interval=5, backupCount=7) # when S M H D midnight
# 注意时间的格式,区别 - 和 _ , 格式不对影响日志的删除
files_handle.suffix = "%Y-%m-%d_%H-%M-%S.txt"
# 设置日志输出级别和格式
# files_handle.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt_str)
files_handle.setFormatter(formatter)
# 添加到日志处理对象集合
logging.getLogger('').addHandler(files_handle)
if __name__ == '__main__':
setup_log()
logging.info("程序开始启动")
二、多进程中logging的保存问题
非主线进程无法保存logging,没找到怎么设置,选择了一种简单粗暴的方式
在进程中将想要保存的日志信息存入队列中,在主线中使用while循环从队列中取出日志信息,使用logging写入文件
示例代码:
q_logs = multiprocessing.Queue()
def log_test():
for i in range(10):
q_logs.put(("DEBUG", "DEBUG"))
q_logs.put(("INFO", "INFO!"))
q_logs.put(("WARNING", "WARNING!!"))
q_logs.put(("ERROR", "ERROR!!!"))
q_logs.put(("CRITICAL", "CRITICAL!!!!"))
time.sleep(5)
def log_write():
while True:
log_leval, log_info = q_logs.get()
if log_leval == "INFO":
logging.info(log_info)
elif log_leval == "WARNING":
logging.warning(log_info)
elif log_leval == "ERROR":
logging.error(log_info)
elif log_leval == "CRITICAL":
logging.critical(log_info)
elif log_leval == "DEBUG":
logging.debug(log_info)
if __name__ == '__main__':
# setup_log()
logging.info("程序开始启动")
m_test = multiprocessing.Process(target=log_test)
m_test.start()
log_write()



