Python模块_logging模块
loggin日志分级
import logging logging.basicConfig( #设置等级 level = logging.INFO, #设置输出文件名 filename = 'log/test1.log', #设置输出是w模式,即 写模式,覆盖重写,默认为a模式,追加模式 filemode="w", #指定handler输出格式 format='时间%(asctime)s 文件名%(filename)s 行号:[%(lineno)d] 等级名称:%(levelname)s 日志内容: %(message)s', #steam打印到控制台和filename如果同时出现,只会走filename,忽略stream ) # 为什么 从warning开始才有打印呢,因为logging是分等级的, # 默认是warning以上的级别才打印输出,可以通过basicConfig()方法设置级别 logging.debug("我是debug message") #无打印输出 logging.info("我是info message") #无打印输出 logging.warning("我是warning message") #有 logging.error("我是error message") #有 logging.critical("我是critical message") #有
#补充一下format参数中可能会用到的格式化串: %(name)s logger的名称 %(levelno)s 数字形式的日志级别 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有 %(filename)s 调用日志输出函数的模块的文件名 %(module)s 调用日志输出函数的模块名 %(funcName)s 调用日志输出函数的函数名 %(lineno)d 调用日志输出函数的语句所在的代码行号 %(created)f 显示当前时间,用UNIX标准的表示时间,用浮点数表示 %(relativeCreated)d 输出日志信息时的 自logger创建以来的所用的毫秒数 %(asctime)s 字符串形式的显示当前时间,默认格式是"2019-08-08 11:11:11,888" 后面的888是毫秒 %(thread)d 线程ID,可能没有 %(threadName)s 线程名,可能没有 %(process)d 进程ID,可能没有 %(message)s 用户输出的消息
logging的steam和filename如果同时出现,只会走filename,下面就通过建立logger对象来解决这个问题,达到控制台和文件同时输出
import sys print(sys.version) logger = logging.getLogger() logger.setLevel(logging.DEBUG) f_handler = logging.FileHandler("test1_log.log",encoding="utf-8") s_handler = logging.StreamHandler s_handler.setLevel(s_handler,logging.DEBUG) logger.addHandler(f_handler) logger.addHandler(s_handler) logger.debug("我是debug") logger.info("我是info")
#报错,先跳过了,我的python版本是3.7.2 Traceback (most recent call last): File "D:/Py_Files/py_project/my_py_1/py1/test1.py", line 387, in <module> logger.debug("我是debug") File "D:\py3\lib\logging\__init__.py", line 1371, in debug self._log(DEBUG, msg, args, **kwargs) File "D:\py3\lib\logging\__init__.py", line 1519, in _log self.handle(record) File "D:\py3\lib\logging\__init__.py", line 1529, in handle 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] self.callHandlers(record) File "D:\py3\lib\logging\__init__.py", line 1591, in callHandlers hdlr.handle(record) TypeError: handle() missing 1 required positional argument: 'record'