logging模块
logging模块
默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET)
logging.debug('debug hello') #调错 logging.info('info 任意') #正常输出 logging.warning('warning message') #警 告 logging.error('error message') #错误 logging.critical('critical message') #系统
basicConfig
''' #basicConfig 调整参数 可见在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有 filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。 filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。 format:指定handler使用的日志显示格式。 datefmt:指定日期时间格式。 level:设置rootlogger(后边会讲解具体概念)的日志级别 stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open('test.log','w')), 默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。 ''' logging.basicConfig( level=logging.DEBUG, #level 调整对应的日志级别,如果调整到DEBUG,就会输出五条记录 filename='logging.log', #filename 将log内容写入到指定文件,默认log只追加,不覆盖 #filemode='w', #修改添加类别,为w写入,也就是说,每次都写入新的 format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s' #设定格式,如果要添加格式 %(这里边添加)s ) ''' format可加参数 %(name)s Logger的名字 %(levelno)s 数字形式的日志级别 %(levelname)s 文本形式的日志级别 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有 %(filename)s 调用日志输出函数的模块的文件名 %(module)s 调用日志输出函数的模块名 %(funcName)s 调用日志输出函数的函数名 %(lineno)d 调用日志输出函数的语句所在的代码行 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 %(thread)d 线程ID。可能没有 %(threadName)s 线程名。可能没有 %(process)d 进程ID。可能没有 %(message)s用户输出的消息 '''
logger
dy_logger = logging.getLogger() fh = logging.FileHandler('test_log') #FileHandler可向文件发送日志 ch = logging.StreamHandler() #StreamHandler可向屏幕发送日志 dy_logger.setLevel('DEBUG') #定义日志级别,放在那里都可以,武功啥时候都能学,学完都能用 #fm定义日志输出格式 fm = logging.Formatter('%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s') #既可以向文件输出,也可以像屏幕输出 fh.setFormatter(fm) #用fh吃掉fm,说明,向日志文件中输出的是以fm格式定义的信息 ch.setFormatter(fm) #同理 dy_logger.addHandler(fh) #把功能吃掉 dy_logger.addHandler(ch) #把功能吃掉 #__________以上都是定义______________ #__________以下都是调用______________ dy_logger.debug('debug') dy_logger.info('info') dy_logger.warning('warning') dy_logger.error('error') dy_logger.critical('critical')
ps1:函数型
写成函数形式,并没有返回值
import logging def logger(): logger=logging.getLogger() #创建一个大对象 fh=logging.FileHandler("test_log") #向文件里发送内容,并且给个参数,作用是:定义一个文件名,往文件里写入内容 ch=logging.StreamHandler() #向屏幕上发送内容 fm=logging.Formatter("%(asctime)s %(message)s") #这个也是一个对象,作用是:定义日志格式 fh.setFormatter(fm) #往文件里写内容 ch.setFormatter(fm) #往屏幕上输出内容 logger.addHandler(fh) #对象,类似于吸别人内力,把fh吃掉 logger.addHandler(ch) #对象,类似于吸别人内力,把ch吃掉 logger.setLevel("DEBUG") #设置日志级别,控制日志输入多少条信息 return logger #-------------从这里开始都是在操作log---------------- logger=logger() #这个日志就做成了一个接口,想在其它地方使用,直接调用他就可以啦! logger.debug("debug") #输出日志的级别 logger.info("info") logger.warning("warning") logger.error("error") logger.critical("critical")

注意事项:
ps1:没有根用户
#如果我们再创建两个logger对象
import logging logger1 = logging.getLogger('mylogger') #默认是根,这里代表他是子用户(两个用户是同级) #logger1 = logging.getLogger('mylogger.sontree') #如果mylogger下再创建一个字对象,就用.sontree;等于他就是mylogger的下级对象。 logger1.setLevel(logging.DEBUG) #第一次是DEBUG级别 logger2 = logging.getLogger('mylogger') #默认是根,这里代表他是子用户(两个用户是同级) logger2.setLevel(logging.INFO) #第二次是INFO级别,覆盖第一次的级别,所以打印结果是INFO级别显示 fh=logging.FileHandler("test_log-new") #向文件里发送内容,并且给个参数,作用是:定义一个文件名,往文件里写入内容 ch=logging.StreamHandler() #向屏幕上发送内容 logger1.addHandler(fh) logger1.addHandler(ch) logger2.addHandler(fh) logger2.addHandler(ch)
执行结果:
logger1 and logger2各打印4条信息 生成一个test_log-new的文件,同时往里面写入信息,并在屏幕上面显示相同信息。 文件内容如下: logger1 info message logger1 warning message logger1 error message logger1 critical message logger2 info message logger2 warning message logger2 error message logger2 critical message #屏幕上面显示的内容 logger1 info message logger1 warning message logger1 error message logger1 critical message logger2 info message logger2 warning message logger2 error message logger2 critical message
ps2:添加根用户 (lgger和mylogger是父子关系) (注意日志输出问题)
import logging logger = logging.getLogger() #根用户(根用户级别,没有定义日志级别,默认warning级别,所以是3条信息 logger1 = logging.getLogger('mylogger') #默认是根,这里代表他是子用户(两个用户是同级) logger1.setLevel(logging.DEBUG) #第一次是DEBUG级别,默认是打印五条信息,但是他打印信息的时候,会先去找父,如果有父,他就会多打印一遍,所以输出是10条信息 fh=logging.FileHandler("test_log-new") #向文件里发送内容,并且给个参数,作用是:定义一个文件名,往文件里写入内容 ch=logging.StreamHandler() #向屏幕上发送内容 logger.addHandler(ch) #添加一个根用户 logger.addHandler(fh) logger1.addHandler(fh) #添加一个子用户 logger1.addHandler(ch) #打印信息 logger.debug('logger debug message') logger.info('logger info message') logger.warning('logger warning message') logger.error('logger error message') logger.critical('logger critical message') #打印4条信息 logger1.debug('logger1 debug message') logger1.info('logger1 info message') logger1.warning('logger1 warning message') logger1.error('logger1 error message') logger1.critical('logger1 critical message')
执行结果:
生成一个test_log-new的文件,同时往里面写入信息,并在屏幕上面显示相同信息。 文件内容如下: logger warning message logger error message logger critical message #前三条是根输出的三条信息 logger1 debug message #后10条是子输出的10条信息,为什么会输入10条呢? logger1 debug message #第一次是DEBUG级别,默认是打印五条信息,但是他打印信息的时候,会先去找父,如果有父,他就会多打印一遍,所以输出是5+5=10条信息 logger1 info message logger1 info message logger1 warning message logger1 warning message logger1 error message logger1 error message logger1 critical message logger1 critical message 屏幕输出内容如下: logger warning message logger error message logger critical message logger1 debug message logger1 debug message logger1 info message logger1 info message logger1 warning message logger1 warning message logger1 error message logger1 error message logger1 critical message logger1 critical message
ps3:添加根用户 (控制根用户不输入,只输出子用户信息)
import logging logger = logging.getLogger() #根用户(根用户级别,没有定义日志级别,默认warning级别,所以是3条信息 logger1 = logging.getLogger('mylogger') #默认是根,这里代表他是子用户(两个用户是同级) logger1.setLevel(logging.DEBUG) #第一次是DEBUG级别,默认是打印五条信息,但是他打印信息的时候,会先去找父,如果有父,他就会多打印一遍,所以输出是10条信息 fh=logging.FileHandler("test_log-new") #向文件里发送内容,并且给个参数,作用是:定义一个文件名,往文件里写入内容 ch=logging.StreamHandler() #向屏幕上发送内容 logger1.addHandler(fh) #添加一个子用户 logger1.addHandler(ch) #打印4条信息 logger1.debug('logger1 debug message') logger1.info('logger1 info message') logger1.warning('logger1 warning message') logger1.error('logger1 error message') logger1.critical('logger1 critical message')
执行结果:
#生成一个test_log-new的文件,同时往里面写入信息,并在屏幕上面显示相同信息。 文件内容如下: logger1 debug message logger1 info message logger1 warning message logger1 error message logger1 critical message 屏幕输出内容如下: logger1 debug message logger1 info message logger1 warning message logger1 error message logger1 critical message

浙公网安备 33010602011771号