logging日志.py

import os, sys, inspect, traceback
# print(os.path.basename(__file__))   # 文件名
# print(inspect.stack()[1][3])   # 函数名
# print(sys._getframe().f_lineno)   # 当前行号
# print(traceback.format_exc())   # 异常信息
import logging
import datetime
import os
from logging.handlers import RotatingFileHandler
import colorlog  # 日志颜色

log_colors_config = {
    'DEBUG': 'cyan',
    'INFO': 'green',
    'WARNING': 'yellow',
    'ERROR': 'red',
    'CRITICAL': 'red',
}

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# logging_format = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
logging_format = colorlog.ColoredFormatter('%(log_color)s - %(asctime)s - %(levelname)s - %(message)s',
                                           log_colors=log_colors_config)


def __console(level, message):
    # 线上日志文件目录
    file_name = datetime.datetime.now().strftime('%Y-%m-%d')
    # fiel_path_star = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
    file_path = '/store/logs/whole_web_search/' + file_name
    if not os.path.exists(file_path):
        os.makedirs(file_path)
    LOG_FILENAME = file_path + f'/whole_web_search.{file_name}.log'
    # print(LOG_FILENAME)
    fh = RotatingFileHandler(LOG_FILENAME, encoding='UTF-8', maxBytes=1024 * 1024 * 100, backupCount=999)
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(logging_format)
    logger.addHandler(fh)

    # # 创建一个StreamHandler,用于输出到控制台
    ch = colorlog.StreamHandler()
    ch.setLevel(logging.DEBUG)
    ch.setFormatter(logging_format)
    logger.addHandler(ch)

    if level == 'info':
        logger.info(message)
    elif level == 'debug':
        logger.debug(message)
    elif level == 'warning':
        logger.warning(message)
    elif level == 'error':
        logger.error(message)
    # 这两行代码是为了避免日志输出重复问题
    logger.removeHandler(ch)
    logger.removeHandler(fh)
    fh.close()  # 关闭打开的文件


def debug(message):
    __console('debug', message)


def info(message):
    __console('info', message)


def warning(message):
    __console('warning', message)


def error(message):
    __console('error', message)


if __name__ == '__main__':
    print(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))

posted @ 2019-07-24 10:58  殇夜00  阅读(9)  评论(0)    收藏  举报