logging

import logging
from logging.handlers import RotatingFileHandler
import os
from datetime import datetime
class LoggingUtils:
    def make_log_dir(dirname='logs'):  # 创建存放日志的目录,并返回目录的路径
        root=os.path.dirname(os.path.dirname(__file__))
        logDir=os.path.join(root,dirname)
        path = os.path.normpath(logDir)
        if not os.path.exists(path):
            os.mkdir(path)
        return path
    @staticmethod
    def get_loggingFileName(fileName):
        # root=os.path.dirname(os.path.dirname(__file__))
        # logDir=os.path.join(root,"logs")
        # fileName="%s.log"% datetime.now().strftime("%Y-%m-%d")
        logDir = os.path.join(LoggingUtils.make_log_dir(),fileName)
        logFile=os.path.normpath(logDir)
        return logFile
    @staticmethod
    def init_logger(name, file=None):
        '''
        功能:
            初始化logger对象
        参数:
            name  必选 string logger模块名称
            file  可选 string logger记录文件名,绝对路径
        返回值:
            logger对象
        举例:
            init_logger(__name__, 'P:/PublicFiles/utils.log')
        '''
        import logging
        log_level = 'INFO'
        log_format = '[%(asctime)s %(levelname)s %(name)s - %(threadName)s] %(message)s'
        log_formatter = logging.Formatter(log_format, datefmt='%Y-%m-%d %H:%M:%S')
        f_handler = logging.FileHandler(file)
        f_handler.setFormatter(log_formatter)
        root = logging.getLogger(name)
        root.setLevel(log_level)
        root.addHandler(f_handler)

        return root
    @staticmethod
    def logging(name,filenamePath,level='INFO'):
        #logger
        logger=logging.getLogger()
        level=logging.getLevelName(level)
        logger.setLevel(level)
        if not logger.handlers:
            #handeler
            # fHandler=logging.FileHandler(filename=LoggingUtils.get_loggingFileName(name),encoding="utf-8")
            # fHandler=logging.FileHandler(filename=filenamePath,encoding="utf-8")
            fHandler=RotatingFileHandler(filename=filenamePath,maxBytes=1024, backupCount=10,encoding="utf-8")
            # handler = RotatingFileHandler(filename='app.log', maxBytes=1024, backupCount=3)

            sh = logging.StreamHandler()  # 创建日志处理器,在控制台打印
            #formater 创建格式器,指定日志的打印格式
            #log_format = '[%(asctime)s %(levelname)s %(name)s - %(threadName)s] %(message)s'
            # fm="[%(asctime)s]-[%(levelname)s]-[%(name)s]-[Line:%(lineno)d]-[Thread:%(threadName)s]-[Msg:%(message)s]"
            fm="[%(asctime)s-%(levelname)s-%(module)s-%(funcName)s-Line:%(lineno)d-Thread:%(threadName)s-ThreadId:%(thread)d-Progress:%(process)d] Msg:%(message)s"
            fmt=logging.Formatter(fm)
            fHandler.setFormatter(fmt)
            sh.setFormatter(fmt)
            #add-handeler
            logger.addHandler(fHandler)
            logger.addHandler(sh)
            return logger

Python的logging模块提供了多种格式化日志消息的方式,可以使用不同的占位符和参数来自定义日志输出的格式。常用的格式化字符串包括:

  1. %(levelname)s:日志级别的名称,例如:"DEBUG"、"INFO"、"WARNING"、"ERROR"、"CRITICAL"。

  2. %(asctime)s:日志记录的时间戳,例如:"2021-01-01 12:34:56"。

  3. %(message)s:日志消息本身。

  4. %(name)s:日志记录器的名称。

  5. %(filename)s:包含日志记录的源文件的文件名。

  6. %(funcName)s:包含日志记录的函数或方法的名称。

  7. %(lineno)d:包含日志记录的源文件的行号。

  8. %(module)s:包含日志记录的模块名称。

  9. %(process)d:日志记录的进程ID。

  10. %(thread)d:日志记录的线程ID。

  11. %(pathname)s:包含日志记录的源文件的完整路径。

  12. %(relativeCreated)d:日志记录的相对创建时间。

  13. %(funcName)s:包含日志记录的函数或方法的名称。

  14. %(processName)s:日志记录的进程名称。

  15. %(threadName)s:日志记录的线程名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值