Python 登录 - 仅登录到文件

Python Loggin - Only log to file

基本上,我想为每个目的初始化一个记录器,这样每个记录器都会记录到一个文件,但我注意到日志的内容也已打印到控制台。我不希望这种情况发生,但我不知道如何调整我的代码。

def getLogger(loggerName:str, fileDir:str,
              level = logging.DEBUG,
              format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'):
    """return a logger for logging
    somehow the logDecorator function does 

    Args:
        loggerName (str): name given to the logger
        fileDir (str): directory
        level ([type], optional): [description]. Defaults to logging.DEBUG.
        format (str, optional): [description]. Defaults to '%(asctime)s - %(name)s - %(levelname)s - %(message)s'.

    Returns:
        logger: [description]
    """

    myLogger = logging.getLogger(loggerName)
    myLogger.setLevel(level)

    myFormat = logging.Formatter(format)
    myHandler = logging.FileHandler(fileDir, mode='a')
    myHandler.setFormatter(myFormat)
    myLogger.addHandler(myHandler)

    # console only prints WARNING & ABOVE
    # ideally, what I thought is that if I don't not 
    # add a SteamHandler, the log won't even print to console at all
    # but adding a SteamHandler still prints EVERYTHING to the console
    # despite the level set as WARNING
    console = logging.StreamHandler()
    console.setLevel(logging.WARNING)
    console.setFormatter(myFormat)
    myLogger.addHandler(console)

    return myLogger

我试过这个:

mainLogger = logging.getLogger()
mainLogger.setLevel(logging.WARNING) # only log WARNING and above

但效果不佳,仍在打印到控制台。

所以我对LOGGING模块的理解很迷茫,我不确定我哪里做错了。

代码使用示例:

aRandomLogger = getLogger(loggerName = 'ProgressLogger', fileDir = '../logs/ProgressLogger.log')

aRandomLogger.info('This is an information, I want it to be log to file, but not on console')

aRandomLogger.warning('this is a warning, I want it be be log to file, and shown on console')

事实证明,两个日志都保存到文件和控制台。

已经有一段时间了,但我设法找到了解决方法。

myLogger = logging.getLogger(loggerName)
myLogger.propagate = False

propagate 设置为 False 将防止记录器在任何地方产生不需要的日志。