引言
我们编写了智能车运行过程中的日志记录系统,通过该系统实现对智能车运行状态和错误信息的记录和管理。本部分记录了日志记录系统的详细步骤和代码示例。
日志记录系统
日志记录系统是智能车运行过程中不可或缺的一部分,通过对运行状态和错误信息的记录,能够帮助我们更好地调试和维护智能车。以下是实现该功能的代码。
-
导入必要的库 首先,我们需要导入相关库:
import logging, os, datetime, time, glob from logging.handlers import RotatingFileHandler
-
logging
用于日志记录。 -
os
和glob
用于操作系统相关功能。 -
datetime
和time
用于时间处理。 -
RotatingFileHandler
用于实现日志文件的滚动记录。
-
创建日志文件 编写
logger_file
函数,用于创建日志文件:
def logger_file(dir): for i in range(10): str_date = "2024-03-1" + str(i) path = os.path.join(dir, str_date + "-all" + ".log") # 创建文件 file = open(path, "w") file.close() time.sleep(1)
-
logger_file
函数在指定目录下创建10个日志文件,文件名按照日期命名。
-
删除旧日志文件 编写
logger_file_remove_byday
函数,用于删除指定天数之前的日志文件:
def logger_file_remove_byday(dir, day=10): error_file_list = glob.glob(dir + "/*all.log") error_file_list.sort() for i in range(len(error_file_list) - day): time_file_lists = glob.glob(error_file_list[i][:-7] + "*") for file_name in time_file_lists: print(file_name) os.remove(file_name)
-
logger_file_remove_byday
函数删除指定目录下10天前的日志文件,确保日志文件不会无限制增长。
-
定义日志处理函数 编写
logger_handler
函数,用于创建和配置日志处理器:
def logger_handler(name: str) -> logging.Logger: logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) cur_path = os.path.abspath(os.path.dirname(__file__)) # 当前文件路径 log_dir = os.path.join(cur_path, 'logs') # log_path为存放日志的路径 logger_file_remove_byday(log_dir) now_time = datetime.datetime.now().strftime('%Y-%m-%d') # 当前日期格式化 __all_log_path = os.path.join(log_dir, now_time + "-all" + ".log") # 收集所有日志信息文件 __error_log_path = os.path.join(log_dir, now_time + "-error" + ".log") # 收集错误日志信息文件 formatter = logging.Formatter('%(asctime)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[log]:%(message)s') handler_cfgs = [{'type': 'file', 'filename': __all_log_path, 'level': logging.INFO, 'formatter': formatter}, {'type': 'file', 'filename': __error_log_path, 'level': logging.ERROR, 'formatter': formatter}, {'type': 'console', 'level': logging.DEBUG, 'formatter': formatter}] for handler_cfg in handler_cfgs: if handler_cfg['type'] == 'file': handler = RotatingFileHandler(filename=handler_cfg['filename'], maxBytes=1 * 1024 * 1024, backupCount=3, encoding='utf-8') elif handler_cfg['type'] == 'console': handler = logging.StreamHandler() handler.setFormatter(handler_cfg['formatter']) handler.setLevel(level=handler_cfg['level']) logger.addHandler(handler) return logger
-
logger_handler
函数创建日志处理器,并配置日志格式和日志文件的滚动记录。
-
测试日志记录 编写
loger_test
函数,用于测试日志记录功能:
def loger_test(): logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) cur_path = os.path.abspath(os.path.dirname(__file__)) # 当前文件路径 log_path = os.path.join(cur_path, 'logs') # log_path为存放日志的路径 if not os.path.exists(log_path): os.mkdir(log_path) # 若不存在logs文件夹,则自动创建 fh = logging.FileHandler('mylog.log') fh.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s- %(filename)s-[line:%(lineno)d]-%(levelname)s-[log]:-%(message)s') fh.setFormatter(formatter) logger.addHandler(fh) i = 0 while True: i += 1 logger.debug('debug message:' + str(i)) logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') time.sleep(1)
-
loger_test
函数测试日志记录功能,并生成不同级别的日志信息。
-
主函数 编写主函数,启动日志记录测试:
if __name__ == '__main__': logger = logger_handler("my_logger") logger_file_remove_byday("./logs") # loger_test()
-
__name__ == "__main__"
判断用于确保代码在作为脚本执行时运行日志记录测试。
总结
通过以上代码,智能车实现了日志记录系统。该系统通过对运行状态和错误信息的记录,帮助我们更好地调试和维护智能车。