我想对我的模块使用日志记录,但我不确定如何设计以下要求:
stderrsys.exit()在程序结束时执行astdout直到记录器设置完毕我已经阅读了日志记录文档,但我不确定使用日志模块的最简化方法是什么(如何使用Logger,Handler,Filter等概念).你能指出一个想法来设置它吗?(例如,使用两个记录器'user','developer'编写模块;派生自Logger; do getLogger(__name__);保持这样的错误标志,......等)
你有没有想过这个?
看看文档说的内容:
定义您自己的水平是可能的,但不一定是必要的,因为现有水平是根据实践经验选择的.但是,如果您确信需要自定义级别,那么在执行此操作时应特别小心,如果您正在开发库,则定义自定义级别可能是一个非常糟糕的主意.这是因为如果多个库作者都定义了他们自己的自定义级别,那么使用开发人员很难控制和/或解释这些多个库的日志记录输出,因为给定的数值可能意味着不同的东西对于不同的图书馆
另外看看何时使用日志记录,有两个非常好的表解释何时使用什么.
无论如何,如果您认为您需要额外的日志记录级别,请查看:logging.addLevelName().
使用具有不同处理程序的不同记录器系列.在每个家庭设置的基地Logger.propagate来False.
stderr默认情况下已经发生这种情况StreamHandler:
class logging.StreamHandler(stream = None)
返回StreamHandler类的新实例.如果指定了stream,则实例将使用它来记录输出; 否则,将使用sys.stderr.
获取具有不同名称的记录器,并在Formatter中使用格式字符串%(name)s.
stdout直到记录器设置完毕您的日志记录系统的设置应该是最先做的事情之一,所以我真的不明白这意味着什么.如果您需要将消息发送到stdout使用print,并且已在" 何时使用日志记录"中进行了说明.
最后的建议:仔细阅读Logging Cookbook,因为它很好地涵盖了您的需求.
我不会在第一时间过滤,文件管理器很难维护,如果它们都在一个地方,那么该地方将需要保存太多信息.每个模块都应该使用或不使用其父设置来设置自己的Logger(使用自己的处理程序或过滤器).
很快的例子:
# at the very beginning
root = logging.getLogger()
fallback_handler = logging.StreamHandler(stream=sys.stdout)
root.addHandler(fallback_handler)
# first.py
first_logger = logging.getLogger('first')
first_logger.parent = False
# ... set 'first' logger as you wish
class Foo:
def __init__(self):
self.logger = logging.getLogger('first.Foo')
def baz(self):
self.logger.info("I'm in baz")
# second.py
second_logger = logging.getLogger('first.second') # to use the same settings
# third.py
abstract_logger = logging.getLogger('abs')
abstract_logger.parent = False
# ... set 'abs' logger
third_logger = logging.getLogger('abs.third')
# ... set 'abs.third' particular settings
# fourth.py
fourth_logger = logging.getLogger('abs.fourth')
# [...]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2057 次 |
| 最近记录: |