之前的时候我记录日志都是自己手写,将内容写进文件,总觉得这样好low,今天在写企业微信脚本的时候,就查了下,果然有logging模块,就直接拿过来用了,百度代码如下
logging.basicConfig( level=logging.DEBUG, # log level format='%(asctime)s %(filename)s : %(levelname)s %(message)s', # log format datefmt='%Y-%m-%d %A %H:%M:%S', # record time filename='./log/log.txt', # log filename filemode='w') console = logging.StreamHandler() # console handler console.setLevel(logging.INFO) # handler level formatter = logging.Formatter('%(asctime)s %(filename)s : %(levelname)s %(message)s') # handler format console.setFormatter(formatter) logging.getLogger().addHandler(console)
结果发现,日志可以记录,但是中文会乱码(吐槽下百度搜来的代码有些真的是胡乱写)
于是看了下文档
修改代码如下
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s" DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p" fp = logging.FileHandler('./log/log.txt', encoding='utf-8') logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT, handlers=[fp]) logging.debug(msg)
乱码问题解决
另外,查询文档得到如下
Logger:日志,暴露函数给应用程序,基于日志记录器和过滤器级别决定哪些日志有效。
LogRecord :日志记录器,将日志传到相应的处理器处理。
Handler :处理器, 将(日志记录器产生的)日志记录发送至合适的目的地。StreamHandler是输出到控制台命令行,FileHandler是输出到文件
Filter :过滤器, 提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter:格式化器, 指明了最终输出中日志记录的布局。
日志级别如下,可以按照自己的需求选用,系统默认输出Warning级别以上的消息