chinapnr / fishbase

自主开发、整理的一套 Python 基础函数库,涵盖 system 系统增强包、logger 日志记录增强包、file 文件处理增强包、 date 日期处理函数包、data 数据信息处理函数包、csv 处理增强函数包、crypt 加密/编码增强包等,可减少程序开发工作量、降低引用复杂度。
MIT License
94 stars 29 forks source link

fish_logger 建议增加日志输出位置选项 #221

Closed rexyan closed 5 years ago

rexyan commented 5 years ago

在目前的 fishbase 版本中,大多数日志输出需求是将日志输出到磁盘中。在即将部署在 k8s 的系统中,希望将日志输出到标准输出中。这样增加 fishbase 日志输出灵活性。

mindjun commented 5 years ago

实现代码如下: set_log_file 函数新加关键字参数: is_stdout ,当 is_stdout 为 True 时,为 logger 新加 addHandler, logging.StreamHandler(sys.stdout)

def set_log_file(local_file=None, is_stdout=False):

    default_log_file = 'default.log'

    _formatter = logging.Formatter(
        '%(asctime)s %(levelname)s %(filename)s[ln:%(lineno)d] %(message)s')

    if local_file is not None:
        default_log_file = local_file

    _tfh = SafeFileHandler(filename=default_log_file)
    _tfh.setLevel(logging.INFO)
    _tfh.setFormatter(_formatter)

    logger.setLevel(logging.INFO)

    if is_stdout:
        stdout_handler = logging.StreamHandler(sys.stdout)
        logger.addHandler(stdout_handler)

    logger.addHandler(_tfh)
itaa commented 5 years ago
    if is_stdout:
        stdout_handler = logging.StreamHandler(sys.stdout)
        logger.addHandler(stdout_handler)

这种方式是在原有的基础上增加一个 stdout_handler ,目前的需求是仅输出至 stdout ,逻辑还要优化一下

mindjun commented 5 years ago

新加函数 set_log_stdout,调用时为 logger 添加 stdout_handler:

def set_log_stdout():
    """
    设置日志输出到标准输出中

    :param: 无
    :return: 无

    举例如下::

        from fishbase.fish_logger import *

        set_log_stdout()

        logger.info('test fish base log')
        logger.warn('test fish base log')
        logger.error('test fish base log')

        print('log ok')
    """
    _formatter = logging.Formatter(
        '%(asctime)s %(levelname)s %(filename)s[ln:%(lineno)d] %(message)s')

    logger.setLevel(logging.INFO)
    stdout_handler = logging.StreamHandler(sys.stdout)
    stdout_handler.setFormatter(_formatter)

    logger.addHandler(stdout_handler)