簡體   English   中英

Python記錄-額外​​輸出?

[英]Python Logging - Extra Output?

我正在為項目構建Logger類,並且已指定輸出,該輸出以以下格式顯示日志

2017-05-16 13:29:17,573 - Geospatial - INFO - Using only New York Geolocations
2017-05-16 13:29:18,325 - Server - INFO - Successfully launched AppLogs consumer

但是控制台也正在打印此行,我不希望這樣做。

INFO:Server:Successfully launched AppLogs consumer

記錄器將正確的輸出打印到輸出文件。 我以為可能與處理程序有關,但是我無法通過嘗試的修改來阻止它。 任何想法將不勝感激。

這是課程:

import os
import logging
import logging.config
import yaml

class Logger():

    #Types of Logs: debug, info, warning & error

    def __init__(self, name):

        with open("config.yml", 'r') as ymlfile:
            cfg = yaml.load(ymlfile)

        if 'file_name' in cfg['logging']:
            file_name = cfg['logging']['file_name']
        else:
            file_name = 'application'

        if 'folder_name' in cfg['logging']:
            folder_name = cfg['logging']['folder_name']
        else:
            folder_name = 'logs'


        if not os.path.exists('{}/'.format(folder_name)):
            os.makedirs(folder_name)
        file_name = os.path.join(os.getcwd(),
                                 '{}/{}.log'.format(folder_name, file_name))

        name = name.replace('.log','')

        if name.lower() in cfg['logging']:

            if cfg['logging'][name.lower()] == 'info':
                level = logging.INFO
            elif cfg['logging'][name.lower()] == 'debug':
                level = logging.DEBUG
            elif cfg['logging'][name.lower()] == 'error':
                level = logging.ERROR
            else:
                level = logging.DEBUG
        else:
            level = logging.DEBUG

        logger = logging.getLogger('{}'.format(name))
        logger.setLevel(level)

        # create formatter
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

        handler = logging.FileHandler(file_name)
        handler.setFormatter(formatter)
        handler.setLevel(level)
        logger.addHandler(handler)

        ch = logging.StreamHandler()
        ch.setLevel(level)

        # add formatter to ch
        ch.setFormatter(formatter)

        # add ch to logger
        logger.addHandler(ch)

        self._logger = logger

    def get(self):
        return self._logger

這是因為:

ch = logging.StreamHandler()

因為這會創建一個在控制台上輸出內容的處理程序,請參見https://docs.python.org/2/library/logging.handlers.html#streamhandler

刪除它以及關聯的addHandler調用,以刪除控制台上的輸出(如果您不希望這樣做)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM