Python的日志模块——logging

模块:

        logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

        handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

        filter:提供方式决定一个日志记录是否发送到handler。

        formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。
 

logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为

可用参数有:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。

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参数会被忽略。

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用户输出的消息

代码案例:

简易版:

# -*- coding:utf-8 -*-
import logging

logging.basicConfig(    #配置日志信息
    level=logging.DEBUG,  #设置记录的内容
    format = '%(asctime)s - %(name)s - [%(lineno)d] - %(message)s',  #设置字符串格式
    filename = 'test_1.log', #设置写入的文件名称
    filemode = 'a+',    #一般都是a模式
)

# 简版
if __name__ == '__main__':
    logger = logging.getLogger('苗瑞鑫')       #创建一个Logging对象
    try:
        user_str = int(input("请输入数字:"))
    except ValueError:
        logger.error("用户输入类型错误")        #将错误信息写入日志

面向对象版(后期可扩展)

# -*- coding:utf-8 -*-
import logging
import traceback



logger = logging.getLogger()   #获取一个新的日志
#指定输出信息模板
formatter = logging.Formatter('%(asctime)s - %(name)s - [%(lineno)d] - %(message)s')
#屏幕流
screen = logging.StreamHandler()
#文件流
file = logging.FileHandler('test_2.log','a+',encoding="utf-8")
#将模板绑定给流
screen.setFormatter(formatter)
file.setFormatter(formatter)

# 将流添加到日志
logger.addHandler(screen)
logger.addHandler(file)
#设置错误等级
logger.setLevel(logging.DEBUG)


if __name__ == '__main__':
    try:
        user_str = int(input("请输入数字:"))
    except ValueError:
        s = traceback.format_exc()  # 实际报错信息
        s_index = s.index(':', 1)
        s = s[s_index + 1:].strip()
        logger.debug('用户输入类型错误'+'\n'+s)

注意

重复写入

猜你喜欢

转载自blog.csdn.net/weixin_42598585/article/details/86508271