美文网首页
python日志系统

python日志系统

作者: 思而忧 | 来源:发表于2017-08-21 18:44 被阅读0次

log日志系统

logging是python的标准日志模块

重要行级别

import logging
logging.basicConfig(level=logging.INFO)  # logger的重要性级别debug、info、warning、error 以及 critical。如果不设置默认是info
logger = logging.getLogger(__name__)
logger.info('Start reading database')

# read database here
 
records = {'john': 55, 'tom': 66}
logger.debug('Records: %s', records)
logger.warn('Logging warn')
logger.info('Updating records ...')
# update records here
 
logger.info('Finish updating records')

handler(写入日志)

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# create a file handler
handler = logging.FileHandler('hello.log')
handler = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add the hanlders to the logger 
logger.addHandler(handler)
logger.info('Hello')

关于logger的名称

虽然不是非得将 logger 的名称设置为 name ,但是这样做会给我们带来诸多益处。在 python 中,变量 name 的名称就是当前模块的名称。比如,在模块 “foo.bar.my_module” 中调用 logger.getLogger(name) 等价于调用logger.getLogger(“foo.bar.my_module”) 。当你需要配置 logger 时,你可以配置到 “foo” 中,这样包 foo 中的所有模块都会使用相同的配置。当你在读日志文件的时候,你就能够明白消息到底来自于哪一个模块。

捕捉异常并使用traceback记录

出了问题的时候要记录下来,这时候就需要traceback

捕获异常并用 traceback 把它们记录下来的例子:

try:
    open('/path/to/does/not/exist', 'rb')
except (SystemExit, KeyboardInterrupt):
    raise
except Exception, e:
    logger.error('Failed to open file', exc_info=True)
# 使用参数 exc_info=true 调用 logger 方法, traceback 会输出到 logger 中。
# 可以调用 logger.exception(msg, _args),它等价于 logger.error(msg, exc_info=True, _args)。

最好不要在模块层获取Logger

错误例子

import logging
 
logger = logging.getLogger(__name__)
 
def foo():
    logger.info('Hi, foo')
 
class Bar(object):
    def bar(self):
        logger.info('Hi, bar')

错误例子的日志无法输出信息的

正确例子:

import logging

def foo():
    logger = logging.getLogger(__name__)
    logger.info("xxxxx")

class Bar(object):
    def __init__(self):
        self.logger = logging.getLogger()
    
    def bar(self):
        self.logger.info('xxx')

其他解决方法:

python2.7 之后的版本中 fileConfg 与 dictConfig 都新添加了 “disable_existing_loggers” 参数,将其设置为 False,上面提到的问题就可以解决了。

import logging
import logging.config
 
logger = logging.getLogger(__name__)
 
# load config from file 
 
# logging.config.fileConfig('logging.ini', disable_existing_loggers=False)
 
# or, for dictConfig
 
logging.config.dictConfig({
    'version': 1,              
    'disable_existing_loggers': False,  # this fixes the problem
 
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
        },
    },
    'handlers': {
        'default': {
            'level':'INFO',    
            'class':'logging.StreamHandler',
        },  
    },
    'loggers': {
        '': {                  
            'handlers': ['default'],        
            'level': 'INFO',  
            'propagate': True  
        }
    }
})
 
logger.info('It works!')

相关文章

  • Django中的日志系统章

    Python日志系统 Django使用logging模块记录日志。Python的日志系统分为4块。分别是:logg...

  • python日志系统

    log日志系统 logging是python的标准日志模块 重要行级别 handler(写入日志) 关于logge...

  • 日志模块

    python的标准库里的日志系统从Python2.3开始支持。只要import logging这个模块即可使用。 ...

  • logging

    Python的logging模块提供了通用的日志系统,这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比...

  • python标准日志模块logging的使用方法

    python的标准库里的日志系统从Python2.3开始支持。只要import logging这个模块即可使用。如...

  • Funboot开发:系统日志组件

    系统日志组件 目录 系统日志 使用MongoDb存储日志 系统日志 系统日志分为操作日志、错误日志、登录日志、数据...

  • python项目的日志体系构建实现

    作为一个算法工程师(咳咳),还是需要了解基本的python日志,来为自己的项目构建日志系统的。日志的功能主要是可以...

  • TensorBoard可视化填坑

    TensorBoard是一个日志展示系统,首先需要将各种类型数据汇总输出到日志文件中。 然后在python的编译环...

  • 【问答】Linux

    Linux系统日志在哪里看 Linux日志分为内核及系统日志、用户日志、应用日志;系统日志由rsyslog服务统一...

  • python日志管理

    python的logging如果不设置,那么系统会默认值输出warning和高于warning的日志信息,如图下:...

网友评论

      本文标题:python日志系统

      本文链接:https://www.haomeiwen.com/subject/seshdxtx.html