⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 log_test4.py

📁 xen虚拟机源代码安装包
💻 PY
字号:
#!/usr/bin/env python## Copyright 2001-2002 by Vinay Sajip. All Rights Reserved.## Permission to use, copy, modify, and distribute this software and its# documentation for any purpose and without fee is hereby granted,# provided that the above copyright notice appear in all copies and that# both that copyright notice and this permission notice appear in# supporting documentation, and that the name of Vinay Sajip# not be used in advertising or publicity pertaining to distribution# of the software without specific, written prior permission.# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.## This file is part of the Python logging distribution. See# http://www.red-dove.com/python_logging.html#"""A test harness for the logging module. Tests arbitrary logging levels, filtering, anduse of strftime formatting.Copyright (C) 2001-2002 Vinay Sajip. All Rights Reserved."""import loggingimport locale, syslocale.setlocale(locale.LC_ALL, '')def message(s):    sys.stderr.write("%s\n" % s)##   First, we define our levels. There can be as many as you want - the only limitations are that#   they should be integers, the lowest should be > 0 and larger values mean less information being#   logged. If you need specific level values which do not fit into these limitations, you can use#   a mapping dictionary to convert between your application levels and the logging system.#SILENT      = 10TACITURN    = 9TERSE       = 8EFFUSIVE    = 7SOCIABLE    = 6VERBOSE     = 5TALKATIVE   = 4GARRULOUS   = 3CHATTERBOX  = 2BORING      = 1LEVEL_RANGE = range(BORING, SILENT + 1)##   Next, we define names for our levels. You don't need to do this - in which case the system will#   use "Level n" to denote the text for the level.#my_logging_levels = {    SILENT      : 'Silent',    TACITURN    : 'Taciturn',    TERSE           : 'Terse',    EFFUSIVE    : 'Effusive',    SOCIABLE    : 'Sociable',    VERBOSE     :   'Verbose',    TALKATIVE   :   'Talkative',    GARRULOUS   :   'Garrulous',    CHATTERBOX: 'Chatterbox',    BORING      :   'Boring',}##   Now, tell the logging system to associate names with our levels.#for lvl in my_logging_levels.keys():    logging.addLevelName(lvl, my_logging_levels[lvl])##   Now, define a test function which logs an event at each of our levels.#def doLog(log):    for lvl in LEVEL_RANGE:        log.log(lvl, "This should only be seen at the '%s' logging level (or lower)", logging.getLevelName(lvl))##   Get the root logger and add a console hander to it, when run as a script.#log = logging.getLogger("")if __name__ == "__main__":    hdlr = logging.StreamHandler()    hdlr.setFormatter(logging.Formatter("%(asctime)s %(message)s", "%X")) #date format is as per the locale    log.addHandler(hdlr)else:    hdlr = log.handlers[0]##   Set the logging level to each different value and call the utility function to log events.#   In the output, you should see that each time round the loop, the logging events actually output#   decreases.#for lvl in LEVEL_RANGE:    message("-- setting logging level to '%s' -----" % logging.getLevelName(lvl))    log.setLevel(lvl)    doLog(log)##   Now, we demonstrate level filtering at the handler level. Tell the handler defined above#   to filter at level 'SOCIABLE', and repeat the above loop. Compare the output from the two runs.#hdlr.setLevel(SOCIABLE)message("-- Filtering at handler level to SOCIABLE --")for lvl in LEVEL_RANGE:    message("-- setting logging level to '%s' -----" % logging.getLevelName(lvl))    log.setLevel(lvl)    doLog(log)hdlr.setLevel(0)    #turn off level filtering at the handler##   Now, let's demonstrate filtering. Suppose for some perverse reason we only want to print out#   all except GARRULOUS messages. Let's create a filter for this purpose...#class SpecificLevelFilter(logging.Filter):    def __init__(self, lvl):        self.level = lvl    def filter(self, record):        return self.level != record.levelnoclass GarrulousFilter(SpecificLevelFilter):    def __init__(self):        SpecificLevelFilter.__init__(self, GARRULOUS)garr = GarrulousFilter()hdlr.addFilter(garr)message("-- Filtering using GARRULOUS filter --")for lvl in LEVEL_RANGE:    message("-- setting logging level to '%s' -----" % logging.getLevelName(lvl))    log.setLevel(lvl)    doLog(log)##   Now, let's demonstrate filtering at the logger. This time, use a filter which excludes SOCIABLE#   and TACITURN messages. Note that GARRULOUS events are still excluded.#class VerySpecificFilter(logging.Filter):    def filter(self, record):        return record.levelno not in [SOCIABLE, TACITURN]spec = VerySpecificFilter()log.addFilter(spec)message("-- Filtering using specific filter for SOCIABLE, TACITURN --")for lvl in LEVEL_RANGE:    message("-- setting logging level to '%s' -----" % logging.getLevelName(lvl))    log.setLevel(lvl)    doLog(log)log.removeFilter(spec)hdlr.removeFilter(garr)#Undo the one level which clashes...for regression testslogging.addLevelName(logging.DEBUG, "DEBUG")##   Er...that's it for now#if __name__ == "__main__":    print "All done."    logging.shutdown()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -