() logger = logging.getLogger("logger") logger.setLevel(logging.INFO) my_log_handler = MyLogHandler('...= logging.getLogger('customer_logger') logger.info('hello,shouke') 运行mytest.py,输出结果如下 初始化自定义日志处理器:...如下,在study.py模块,MyLogHandler类之后追加下述代码 LOGGING_CONFIG = { "version": 1, "disable_existing_loggers...= logging.getLogger('customer_logger') logger.info('hello,shouke') 运行mytest.py,输出结果如下 初始化自定义日志处理器:...(config)放自定义日志格式化类模块中,也可能导致重复执行
e中 print e 常见异常类型 AttributeError 试图访问一个对象没有的树形,比如foo.x,但foo没有属性x IOError 输入输出异常;基本是无法打开文件错误...ImportError 无法引入模块或者包;基本上是路径问题或者名称错误 IndentationError 语法错误;代码没有正确的对齐 IndexError: 下标索引超出序列边界...模块使用 logging.getLogger().error("Get users list error: %s" % traceback.format_exc()) print_exc(...模块的api 1:logging.getLogger([name]) 返回一个logger实例,如果没有指定name,返回root logger。...# logging.getLogger(NAME)就相当于向logging模块注册了实例化了 # name 中用 .
("{}.{}".format(__name__,'abcd')) # 此处使用模块名称下的具体方法定义名称,通过format进行字符串的拼接 logb.info('my logb') # 此处因为自身没有配置日志级别...---- 4 logger 实例初始化的paragate属性为True,及允许向父传递logger消息 ---- 5 logging.basicConfig ---- 如果root没有...#重新格式化传值,定义日志输出到文件 root=logging.getLogger() print (root,id(root)) loga=logging.getLogger('s') # 模块和模块下的某个函数或类...)) loga=logging.getLogger('s') # 模块和模块下的某个函数或类 print (loga,id(loga),id(loga.parent)) loga.setLevel(logging.INFO...)) loga=logging.getLogger('s') # 模块和模块下的某个函数或类 print (loga,id(loga),id(loga.parent)) loga.setLevel(logging.INFO
numbers += [4] print(numbers) # 输出:[1, 2, 3, 4] AttributeError: ‘list’ Object Has No Attribute 这种错误发生在尝试调用列表对象不存在的方法时...调试技巧: 使用dir()函数查看对象的方法和属性。...使用logging模块 logging模块比print()更强大,可以记录程序运行过程中的各种信息。...import logging logging.basicConfig(level=logging.DEBUG) numbers = [1, 2, 3] logging.debug(f"Initial...无论是使用print()函数、pdb模块、logging模块,还是分解复杂的列表推导式,这些方法都能帮助你更高效地定位和解决问题。希望这些内容对你有所帮助,并能在实际工作中提高你的调试效率。
AttributeError 当你访问一个对象的属性,但是这个属性并没有在这个对象定义的时候,就会引发 AttributeError。...' object has no attribute 'b' AttributeError 的错误消息行告诉我们特定对象类型(在本例中为 int)没有访问的属性, 在这个例子中属性为 b。...,就会出现 ModuleNotFoundError 的错误,Traceback 最下面一句信息给出了原因, 没有名为 aaa 的模块....并没有太多的内容,但是,结合上面的错误信息,就可以解决这个问题。 NameError 当你引用了变量、模块、类、函数或代码中没有定义的其他名称时,将引发 NameError。...你可以通过导入 logging 模块,记录这些错误,最终代码如下 import logging import requests logger = logging.getLogger (__name
五、记录日志-基础 logging.getLogger(name=None) 是 logging 模块中的一个重要函数,用于创建并返回一个 logger 对象。...logging 模块支持多种类型的处理器 # StreamHandler:将日志消息输出到标准输出或标准错误流。 # # FileHandler:将日志消息输出到指定的文件中。...logging模块中定义好的可以用于format格式字符串说明 字段/属性名称 使用格式 描述 asctime %(asctime)s 将日志的时间构造成可读的形式,默认情况下是‘2016-02-08...可能没有 threadName %(thread)s 线程名称 module %(module)s 调用日志输出函数的模块名, filename的名称部分,不包含后缀即不包含文件后缀的文件名 created...☔八、记录日志-配置logger 在 logging 模块中,可以使用 basicConfig() 函数或者通过编程的方式来配置 logger 对象的属性和行为。
Python内置模块logging提供了灵活且可配置的日志记录功能,用于记录程序运行过程中的信息、警告和错误等。在日志记录中,可以设置日志级别和输出格式等,以便于调试和排查问题。...以下是logging模块的详细介绍。日志级别logging模块定义了以下几个日志级别,分别用于记录不同级别的信息:DEBUG:详细的信息,通常用于调试。INFO:确认一切按预期运行。...ERROR:表示出现了错误或异常情况,但程序仍然可以继续运行。CRITICAL:表示严重的问题,通常会导致程序中止运行。默认情况下,logging模块只会记录WARNING及以上级别的信息。...日志记录器logging模块中的主要对象是Logger类,该类用于创建日志记录器。每个日志记录器都有一个名称,通常以模块名命名,以便于区分不同的记录器。...处理器Logger类的另一个重要属性是处理器(Handler),处理器用于将日志记录输出到不同的位置,例如控制台、文件或网络等。
日志级别 logging 库预置了 5 个错误级别,还有一个 NOTSET 级别,作为 logger 的默认值。...# a warning message 执行上述代码,会发现,logger 并没有输出列表中列出的 LogRecord 的各种属性,只有 message 内容。...Logger 奇葩的默认行为 root_logger = logging.getLogger() root_logger.info('root info') 执行上面的代码,会发现没有任何输出,但是如果打一个...属性,会发现默认情况下 logger 并没有任何的 handlers,这能解释为什么无法输出日志,但是下一行代码输出了 WARNING 级别的日志,显然又是和这个猜测违背的,原因到底是什么呢?...跟踪源码会发现,当一个 logger 需要自己处理日志时且没有任何一个 handler 时,会尝试使用 lastResort 属性所存储的 handler 来处理。
可以在except后面写else,没有错误发生时,自动执行else: try: print('try...')...END 所有的错误类型都继承自BaseException,当执行父类错误except之后,不会再之后后续子类错误except。...logging模块可以记录错误信息之后,继续执行并正常退出,还可以通过配置,把错误信息记录到日志中,方便排查。...ZeroDivisionError: division by zero logging:logging不会抛出错误,而且可以输出到文件。...import logging logging.basicConfig(level=logging.INFO) s = '0' n = int(s) logging.info('n = %d' % n)
6.11自我总结 1.logging模块 用于程序的运行日志 1.初级 #首先程序运行分会出现5中情况 1.logging.info('info') #程序正常运行级别为10 2.logging.debug...(__file__) #__file__为执行文件的当前文件的绝对路径,被当模块调用时候是模块的绝对路径 #2.我们自定义文件是输出文件夹还是打印终端 #输出内容用函数logging.FileHandler...%(module)s: % 调用日志输出函数的模块名 %(name)s Logger的名字 #也就是其中的.getLogger里的路径,或者我们用他的文件名看我们填什么 %(levelno...)s 数字形式的日志级别 #日志里面的打印的对象的级别 %(levelname)s 文本形式的日志级别 #级别的名称 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有 %(filename...可能没有 %(threadName)s 线程名。可能没有 %(process)d 进程ID。
错误示范 import logging log = logging.getLogger() log.setLevel(logging.INFO) log.info("INFO INFO INFO")...默认是WARN级别的日志,这里没有输出WARN说明没有设置成功。...logging.getLogger() 和 logging.getLogger(name) import logging if __name__ == '__main__': log = logging.getLogger...,可能没有 # %(filename)s 调用日志输出函数的模块的文件名 # %(module)s 调用日志输出函数的模块名 # %(funcName)s 调用日志输出函数的函数名...可能没有 # %(threadName)s 线程名。可能没有 # %(process)d 进程ID。可能没有 # %(message)s用户输出的消息
END 由于没有错误发生,所以except语句块不会被执行,但是finally如果有,则一定会被执行(可以没有finally语句)。...此外,如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句: try: print('try...')...8.1.2 调用栈 如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出。...Python内置的logging模块可以非常容易地记录错误信息: # err_logging.py import logging def foo(s): return 10 / int(s)...8.2.3 logging 把print()替换为logging是第3种方式,和assert比,logging不会抛出错误,而且可以输出到文件: import logging s = '0' n =
本章目录: 一、logging模块简介 二、logging模块的使用 三、通过JSON或者YMAL文件配置logging模块 =========================...============================ 一、logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。...,经常通过logging模块级方法(Module-Level Function) logging.getLogger(name)来获得,如果不给定name,就使用root。...2.4 捕获traceback Python中的traceback模块被用于跟踪异常返回的信息,可以在logging中记录下traceback mport logging logger = logging.getLogger...logging 主模块mainModule.py import logging import subModule logger = logging.getLogger("mainModule") logger.setLevel
Logger:日志记录的外部操作界面,是 JDK Logging 模块的代言人。而且 Logger 是有层次关系的。...JDK Logging 的默认配置文件为:$JAVA_HOME/jre/lib/logging.properties,可通过修改系统属性【java.util.logging.config.file】,加载自己的配置文件...; JDK Logging 的默认 Logger 管理器为 java.util.logging.LogManager,可通过修改系统属性【 java.util.logging.manager 】使用自定义的管理器...1.2. logging.properties 配置 .level 属性:全局配置,用于配置默认的全局日志级别; handlers 属性:全局配置,用于配置 root Logger 的 Handler,...全局只有一个 LogManager,默认采用 java.util.logging.LogManager 实现类,也可以通过系统属性 java.util.logging.manager 使用自定义的 LogManager
在 Python 中使用 logging 内置模块即可对项目进行日志的配置。...logging模块的使用 简单使用 logging 模块提供了一系列便利的函数 它们分别是 debug(), info(), warning(), error(), critical() import...中设置 filename 属性即可把日志信息写入文件中 import logging # 日志输出样式 log_format = '%(levelname)s %(asctime)s %(filename...= logging.getLogger() # logger = logging.getLogger('root') logger.debug('debug log test')...然后我们在项目中只要执行完 setup_logging() 日志配置函数 其他模块直接使用 logging.getLogger('server') 就可获取我们配置好的日志器。
')logging.critical('严重错误信息')WARNING:root:警告信息ERROR:root:报错信息CRITICAL:root:严重错误信息v1版本无法指定日志的级别;无法指定日志的格式...('严重错误信息') # 50可在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:filename:用指定的文件名创建FiledHandler...,可能没有%(filename)s 调用日志输出函数的模块的文件名%(module)s 调用日志输出函数的模块名%(funcName)s 调用日志输出函数的函数名%(lineno)d 调用日志输出函数的语句所在的代码行...可能没有%(threadName)s 线程名。可能没有%(process)d 进程ID。可能没有%(message)s用户输出的消息v2版本不能指定字符编码;只能往文件中打印。...(): logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置 logger = logging.getLogger(__name
常用异常 异常名称 描述 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包...断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败...OSError 操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询的基类 IndexError 序列中没有此索引(index...) KeyError 映射中没有这个键 MemoryError 内存溢出错误(对于Python 解释器不是致命的) NameError 未声明/初始化对象 (没有属性) UnboundLocalError...虽然程序会出错,但程序打印完错误信息后会继续执行,并正常退出. # 通过配置,logging还可以把错误记录到日志文件里,方便事后排查.
logging.debug('调试debug') logging.info('消息info') logging.warning('警告warn') logging.error('错误error')...,可能没有 %(filename)s 调用日志输出函数的模块的文件名 %(module)s 调用日志输出函数的模块名 %(funcName)s 调用日志输出函数的函数名 %(lineno)d 调用日志输出函数的语句所在的代码行...可能没有 %(threadName)s 线程名。可能没有 %(process)d 进程ID。...('调试debug') logging.info('消息info') logging.warning('警告warn') logging.error('错误error') logging.critical...(LOGGING_DIC) # 导入上面定义的logging配置 logger = logging.getLogger(__name__) # 生成一个log实例 logger.debug('测试'
本文实例讲述了Python日志logging模块功能与用法。...分享给大家供大家参考,具体如下: 本文内容: logging模块的介绍 logging模块的基础使用 logging模块的扩展使用 logging中的Filter 使用配置文件配置logging和logger...,而这些附加的统一的时间不应该由生产错误信息的部分来添加(可能有很多个模块),而应该将这个信息给专门做这事的部分来处理(交个formatter来处理)。...---- logging模块的扩展使用: 1.导入模块: import logging 2.获取logger对象: logger = logging.getLogger("AppName") 【这里根据不同的名字定义不同的...在模块中使用时,官方文档中有一个这样的代码,有点意思: logger = logging.getLogger(__name__) 3.设置最低日志输出级别: logger.setlevel() 例如:
上表中的参数format可以通过logging模块中定义好模式来设定值: 字段/属性名称 使用格式 描述 asctime %(asctime)s 将日志的时间构造成可读的形式,默认情况下是‘2019-03...一般而言,大多使用下面的方法获得Logger类实例: logging.getLogger(name) 属性name是为Logger实例指定的名称,如果使用同一个名称进行实例化,则实际上只是将后面实例对象名指向前面的同名...在使用logging模块时,系统会自动实例化一个名为root的日志器(根日志器),当未指定name属性时,事实上就是将变量名指向跟日志器 另外,Logger实例具有层级继承的特点,层级之间已“.”连接,...还记得上文中提到logging的日志器可以通过name属性进行分层吗?子日志器可以继承父日志器的配置,也可以重新配置,这就是logging给我们提供的多模块共享日志的解决方案。...看代码: 模块main.py中的代码: import logging import log_child logger = logging.getLogger('main') logger.setLevel
领取专属 10元无门槛券
手把手带您无忧上云