繁体   English   中英

如何将每个级别写入单独的文件,使其不会在该级别以下的每个文件中重复?

[英]How to write each level to a separate file so that it does not repeat in each file below the level?

logger.configure(
    handlers=[
        dict(sink="TRACE.log", level='TRACE', enqueue=True, encoding='utf-8', diagnose=True),
        dict(sink="DEBUG.log", level='DEBUG', enqueue=True, encoding='utf-8', diagnose=True),
        dict(sink="INFO.log", level='INFO', enqueue=True, encoding='utf-8', diagnose=True),
        dict(sink="SUCCESS.log", level='SUCCESS', enqueue=True, encoding='utf-8', diagnose=True),
        dict(sink="WARNING.log", level='WARNING', enqueue=True, encoding='utf-8', diagnose=True),
        dict(sink="ERROR.log", level='ERROR', enqueue=True, encoding='utf-8', diagnose=True),
        dict(sink="CRITICAL.log", level='CRITICAL', enqueue=True, encoding='utf-8', diagnose=True),

    ],
)

logger.trace('TRACE')
logger.debug('DEBUG')
logger.info('INFO')
logger.success('SUCCESS')
logger.warning('WARNING')
logger.error('ERROR')
logger.critical('CRITICAL')](url)

跟踪日志

2021-12-26 15:44:39.272 | TRACE    | __main__:main:216 - TRACE
2021-12-26 15:44:39.272 | DEBUG    | __main__:main:217 - DEBUG
2021-12-26 15:44:39.272 | INFO     | __main__:main:218 - INFO
2021-12-26 15:44:39.272 | SUCCESS  | __main__:main:219 - SUCCESS
2021-12-26 15:44:39.272 | WARNING  | __main__:main:220 - WARNING
2021-12-26 15:44:39.288 | ERROR    | __main__:main:221 - ERROR
2021-12-26 15:44:39.288 | CRITICAL | __main__:main:222 - CRITICAL

如何将每个级别写入单独的文件,使其不会在该级别以下的每个文件中重复?

观察过滤器在测井流程图中的作用。 您可以将过滤器添加到处理程序,该过滤器将仅通过选定的级别。 这是一个小演示:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
logger.addHandler(handler)

print("without filter (all levels)")
logger.debug('DEBUG1')
logger.info('INFO1')
logger.warning('WARNING1')
logger.error('ERROR1')

def logfilter(record):
    # Returns zero for no, nonzero for yes
    return record.levelno == logging.WARNING

handler.addFilter(logfilter)

print("\nwith filter (WARNING level only)")
logger.debug('DEBUG2')
logger.info('INFO2')
logger.warning('WARNING2')
logger.error('ERROR2')

使用filter参数:

import sys

from loguru import logger


def only_level(level):
    def is_level(record):
        return record['level'].name == level

    return is_level


logger.remove()
logger.add(sys.stdout, level='TRACE', filter=only_level('TRACE'))

logger.trace('TRACE')
logger.debug('DEBUG')  # will not be logged

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM