4.12. 使用logging记录曰志信息¶
仅仅将栈信息输出到控制台是远远不够的,更为常见的是使用日志保存程序运行过程中 的相关信息。 如运行时间、描述信息以及错误或者异常发生时候的特定上下文信息。Python 中自带的logging模块提供了日志功能, 它将logger的level分为5个级别(如表所示), 可以通过LoggersetLevelOvl)来设置,其中DEBUG为最低级别,CRIT丨CAL为最高级別, 默认的级別为WARNING。
表 日志级别
Level |
使用情形 |
---|---|
DEBUG |
详细的信息.在追踪问题的时候使用 |
INFO |
正常的信息 |
WARNING |
一些不可预见的 问题发生,或者将要发生,如磁盘空间低等,伹不影响程序的运行 |
ERROR |
由于某些严重的问题,程序中的一些功能受到影响 |
C RITFCAL |
严重的错误.或者程序本身不能够继续运行 |
logging lib包含以下4个主要对象:
4.12.1. 1)logger。¶
logger是程序信息输出的接口,它分散在不同的代码中,使得程序可以在 运行的时候记录相应的信息,并根据设置的日志级别或filter来决定哪些信息需要输出,并 将这些信息分发到其关联的handler。常用的方法有Logger.setLevel()、 Logger.addHarKiler()、 Logger.removeHandlcr()、 Logger.addFilter()、Logger.debug()、Logger.info()、Logger warning()、Logger.error()、etLogger()等。
4.12.2. 2)Handler 。¶
Handler用来处理信息的输出,可以将信息输出到控制台、文件或者网络。 可以通过 Logger.addHandler()来给 logger 对象添加 handler,常用的 handler 有 StreamHandler 和FileHandler类。StreamHandler发送错误信息到流,而FileHandler类用于向文件输出日志 信息,这两个handler定义在logging的核心模块中。其他的handler定义在logging.handles 模块中,如 HTTPHandler、SocketHandler。
4.12.3. 3) Formatter。¶
决定log信息的格式,格式使用类似于%(< dictionary key >)s的形式来定义,如’%(asctime)s - %(levelname)s - %(message)s’,支持的 key 可以在 Python 自带的文档 LogRecord attributes 中査看。
4.12.4. 4)Filter。¶
用来决定哪些信息需要输出。可以被handler和logger使用,支持层次关系, 比如,如果设置了 filter名称为A.B的logger,则该logger和其子logger的信息会被输出, 如 A.B、 A.B.C.
logging.basicConfig([**kwargs])提供对日志系统的基本配置,默认使用StreamHandler和 Formatter并添加到root logger,该方法自Python2.4开始可以接受字典参数,支持的字典参 数如表4-4所示。
表4-4字典参数格式类型
格式 |
描述 |
---|---|
filename |
指定Fi]eHandler的文件名,而不是默认的SireamHandkr |
filemode |
打开文件的模式,同open函数中的N名参数.默认为’a’ |
format |
输出格式字符串 |
datefmt |
日期格式 |
level |
设置根logger的日志级别 |
stream |
指定StrcamHandleru这个参数若与filename冲突,忽略stream |
我们通过修改上一节的例子来看如何结合traceback和logging,记录程序运行过程中的异常。
>>> import traceback
>>> import sys
>>> import logging
>>>
>>> gList = ['a','b','c','d','e','f','g']
>>>
>>> logging.basicConfig(# 配置日志的输出方式及格式
>>> level = logging.DEBUG,
>>> filename = 'log.txt',
>>> filemode = 'w',
>>> format = '% (asctime)s % (filename)s[line: % (lineno)d] %(levelname)s % (message)s',
>>>
>>> )
>>>
>>> def f():
>>> gList[5]
>>> logging.info('[INFO] :calling method g() in f()') # 记录正常的信患
>>> return g()
>>> def g():
>>> logging.info('[INFO] :calling method h() in g()')
>>> return h()
>>> def h():
>>> logging.info('[INFO] :Delete element in gList in h()')
>>> del gList[2]
>>> logging.info('[INFO] :calling method i() in h()')
>>> return i()
>>> def i():
>>> logging.info('[INFO] :Append element i to gList in i()')
>>> gList.append('i')
>>> print(gList[7])
>>> if __name__=='__main__':
>>> logging.debug('Information during calling f():')
>>> try:
>>> f()
>>> except IndexError as ex:
>>> print ("Sorry,Exception occured,you accessed an element out of range")
>>> # traceback.print_exc()
>>> ty,tv,tb = sys.exc_info()
>>> logging.error("[ERROR]:Sorry,Exception occured,you accessed an element out of range") #记录异常错误信息
>>> logging.critical('object info: %s' %ex)
>>> logging.critical('Error Type: {0},Error Information : {1}'.format(ty,tv)) #记录异常的类型和对应的值
>>> logging.critical(''.join(traceback.format_tb(tb)))#记录具体的trace信息
>>> sys.exit(1)
>>>
--- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 32, in <module> logging.debug('Information during calling f():') Message: 'Information during calling f():' Arguments: () --- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 17, in f logging.info('[INFO] :calling method g() in f()') # 记录正常的信患 Message: '[INFO] :calling method g() in f()' Arguments: () --- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 20, in g logging.info('[INFO] :calling method h() in g()') Message: '[INFO] :calling method h() in g()' Arguments: () --- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 23, in h logging.info('[INFO] :Delete element in gList in h()') Message: '[INFO] :Delete element in gList in h()' Arguments: () --- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 25, in h logging.info('[INFO] :calling method i() in h()') Message: '[INFO] :calling method i() in h()' Arguments: () --- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 26, in h return i() File "<ipython-input-10-7c5838082a54>", line 28, in i logging.info('[INFO] :Append element i to gList in i()') Message: '[INFO] :Append element i to gList in i()' Arguments: () --- Logging error --- Traceback (most recent call last): File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 26, in h return i() File "<ipython-input-10-7c5838082a54>", line 30, in i print(gList[7]) IndexError: list index out of range During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 39, in <module> logging.error("[ERROR]:Sorry,Exception occured,you accessed an element out of range") #记录异常错误信息 Message: '[ERROR]:Sorry,Exception occured,you accessed an element out of range' Arguments: () root : ERROR [ERROR]:Sorry,Exception occured,you accessed an element out of range --- Logging error --- Traceback (most recent call last): File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 26, in h return i() File "<ipython-input-10-7c5838082a54>", line 30, in i print(gList[7]) IndexError: list index out of range During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 40, in <module> logging.critical('object info: %s' %ex) Message: 'object info: list index out of range' Arguments: () root : CRITICAL object info: list index out of range --- Logging error --- Traceback (most recent call last): File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 26, in h return i() File "<ipython-input-10-7c5838082a54>", line 30, in i print(gList[7]) IndexError: list index out of range During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 41, in <module> logging.critical('Error Type: {0},Error Information : {1}'.format(ty,tv)) #记录异常的类型和对应的值 Message: "Error Type: <class 'IndexError'>,Error Information : list index out of range" Arguments: () root : CRITICAL Error Type: <class 'IndexError'>,Error Information : list index out of range --- Logging error --- Traceback (most recent call last): File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 26, in h return i() File "<ipython-input-10-7c5838082a54>", line 30, in i print(gList[7]) IndexError: list index out of range During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.7/logging/__init__.py", line 1034, in emit msg = self.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 880, in format return fmt.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 622, in format s = self.formatMessage(record) File "/usr/lib/python3.7/logging/__init__.py", line 591, in formatMessage return self._style.format(record) File "/usr/lib/python3.7/logging/__init__.py", line 433, in format return self._fmt % record.__dict__ ValueError: unsupported format character '(' (0x28) at index 2 Call stack: File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3/dist-packages/ipykernel_launcher.py", line 16, in <module> app.launch_new_instance() File "/usr/lib/python3/dist-packages/traitlets/config/application.py", line 658, in launch_instance app.start() File "/usr/lib/python3/dist-packages/ipykernel/kernelapp.py", line 497, in start self.io_loop.start() File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 132, in start self.asyncio_loop.run_forever() File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever self._run_once() File "/usr/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once handle._run() File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run self._context.run(self._callback, *self._args) File "/usr/lib/python3/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 450, in _handle_events self._handle_recv() File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 480, in _handle_recv self._run_callback(callback, msg) File "/usr/lib/python3/dist-packages/zmq/eventloop/zmqstream.py", line 432, in _run_callback callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher return self.dispatch_shell(stream, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell handler(stream, idents, msg) File "/usr/lib/python3/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request user_expressions, allow_stdin) File "/usr/lib/python3/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File "/usr/lib/python3/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2714, in run_cell interactivity=interactivity, compiler=compiler, result=result) File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2818, in run_ast_nodes if self.run_code(code, result): File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2878, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-10-7c5838082a54>", line 42, in <module> logging.critical(''.join(traceback.format_tb(tb)))#记录具体的trace信息 Message: ' File "<ipython-input-10-7c5838082a54>", line 34, in <module>n f()n File "<ipython-input-10-7c5838082a54>", line 18, in fn return g()n File "<ipython-input-10-7c5838082a54>", line 21, in gn return h()n File "<ipython-input-10-7c5838082a54>", line 26, in hn return i()n File "<ipython-input-10-7c5838082a54>", line 30, in in print(gList[7])n' Arguments: () root : CRITICAL File "<ipython-input-10-7c5838082a54>", line 34, in <module> f() File "<ipython-input-10-7c5838082a54>", line 18, in f return g() File "<ipython-input-10-7c5838082a54>", line 21, in g return h() File "<ipython-input-10-7c5838082a54>", line 26, in h return i() File "<ipython-input-10-7c5838082a54>", line 30, in i print(gList[7])
Sorry,Exception occured,you accessed an element out of range
An exception has occurred, use %tb to see the full traceback.
SystemExit: 1
/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py:2886: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
修改程序后在控制台上对用户仅显示错误提示信息“Sony,Exception occured,Lyou accessed an element out of range”,而开发人员如果需要debug可以在日志文件中找到具体运行过程中的信息。
#为了节省篇幅仅显示部分曰志
2013-06-26 12:05:18,923 traceexample.py[line:41] CRITICAL object info:list index out of range
2013-06-26 12:05:18,923 traceexample.py[line:42] CRITICAL Error Type:<type ‘exceptions.IndexError’>, Error Information:list index out of range
2013-06-26 12:05:18,924 traceexample.py[line:43] CRITICAL File “traceexample.py”,
line 35, in
f()
File “traceexample.py”, line 15, in f
return g()
File “traceexample.py”, line 19, in g
return h()
File”traceexample.py”, line 2S, in h
return i()
File “traceexample.py”, line 30, in i
print(gList[7])
上面的代码中控制运行输出到console上用的是print(),但这种方法比较原始, logging模块提供了能够同时控制输出到console和文件的方法,下面的例子中通过添加 StreamHandler并设置日志级别为logging.ERROR,可以在控制台上输出错误信息。
>>> console = logging.StreamHandler()
>>> console.setLevel(logging.ERROR)
>>> formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
>>> console.setFormatter(formatter)
>>> logging.getLogger('').addHandler(console)
为了使Logging使用更为简单可控,logging支持loggin.config进行配置,支持dictConfig 和fileConftg两种形式,其中fileConfig是基于configparser()函数进行解析,必须包含的内容 为[loggers].、[handlers]和[formatters]。具体例子示意如下:
[loggers]
keys=root
[logger_root]
level=DEBUG
handlers=hand01
[handlers]
keys=hand01
[handler_hand01]
classs = StreamHandler
level=INFO
formatter=form01
arg5=(sys.stderr,)
[formatters]
keys=form01
[formatter_formO1]
format=% (asctime)s %(filename)s[line:% (lineno)d] %(levelname)s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S
最后关于logging的使用,提以下几点建议:
1)尽管logging取一个名字而不是采用默认,这样当在不间的模块中使用的时候,其他模块只需要使用以下代码就可以方便地使用同一个logging,因为它本质上符合单例模式。
>>> import logging
>>> logging.basicConfig(level=logging.DEBUG)
>>> logger=logging.getLogger(__name__)
2)为了方便地找出问题所在,logging的名字建议以模块或者class来命名。Logging名称遵循按”.”划分的继承规则,根是root logger, logger a.b的父logger对象为a。
3)Logging只是线程安全的,不支持多进程写人同一个日子文件,因此对于多个进程, 需要配置不同的日志文件。