uibot python 插件开发,我想记录python运行日志,引入了logging,却出现了问题,求救!!

噗噗星 2022-1-23 635

uibot python 插件开发,我想记录python运行日志,引入了logging,却发现日志保存在了uibot 的安装路径下,且日志重复保存了,多次,这怎么回事啊?

_uibot python 插件开发,我想记录python运行日志,引入了logging,却出现了问题,求救!!

请问:

1.如何记录真实的文件所在行?目前全把日期记录在了这个logging 类所在行中,并不是我调用的位置。

2.如何只保留一条日志?不像现在这样重复了一大堆?


import logging
import logging.handlers
import os
import time
 
class logs(object):
    def __init__(self):
        self.logger = logging.getLogger("")
        # 设置输出的等级
        LEVELS = {'NOSET': logging.NOTSET,
                  'DEBUG': logging.DEBUG,
                  'INFO': logging.INFO,
                  'WARNING': logging.WARNING,
                  'ERROR': logging.ERROR,
                  'CRITICAL': logging.CRITICAL}
        # 创建文件目录
        # logs_dir="../../log/pylog"
        logs_dir="pylog"
        self.logsdir=os.path.abspath(logs_dir) 
        if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
            pass
        else:
            os.mkdir(logs_dir)
        # 修改log保存位置
        timestamp=time.strftime("%Y-%m-%d",time.localtime())
        logfilename='%s.log' % timestamp
        logfilepath=os.path.join(logs_dir,logfilename)
        rotatingFileHandler = logging.handlers.RotatingFileHandler(filename =logfilepath,
                                                                   maxBytes = 1024 * 1024 * 50,
                                                                   backupCount = 5)
        # 设置输出格式
        formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
        # formatter = logging.Formatter('[%(asctime)s] %(filename)s[line:%(lineno)d] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
        rotatingFileHandler.setFormatter(formatter)
        # 控制台句柄
        # console = logging.StreamHandler()
        # console.setLevel(logging.NOTSET)
        # console.setFormatter(formatter)
        # 添加内容到日志句柄中
        self.logger.addHandler(rotatingFileHandler)
        # self.logger.addHandler(console)
        self.logger.setLevel(logging.INFO)
 
    def info(self, message):
        self.logger.info(message)
        return [message,self.logsdir]
 
    def d(self, message):
        self.logger.debug(message)
 
    def w(self, message):
        self.logger.warning(message)
 
    def e(self, message):
        self.logger.error(message)


if __name__ == '__main__':
    logger=logs()
    logger.info("this is \ninfo")
    logger.d("this is debug")
    logger.e("this is error")
    logger.w("this is warning")
    pass


最新回复 (1)
  • 九木成林 2022-1-24
    2
    1.如何记录真实的文件所在行?目前全把日期记录在了这个logging 类所在行中,并不是我调用的位置。
       文件路径用__file__ 取。
    2.如何只保留一条日志?不像现在这样重复了一大堆?
       每次启动的时候按时间戳新建log文件,log模块本身就是非覆盖的。
返回
发新帖