python多進程寫log日誌錯亂問題

首先python的日誌模塊是線程安全的,但是不是進程安全的,但是多線程的python對於提升性能來說並沒有什麼用處,所以就會有個挺奇葩的問題,那就是寫程序記錄日誌時出現錯亂。

這個問題我看了很多帖子,很多種解決辦法,但是說實話都比較麻煩,這裏提供一種比較簡單但是也比較奇葩的解決辦法:

把日誌模塊寫成函數

比如:

def start_log(strPQL):
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

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

    rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
    print os.getcwd()
    log_path = os.getcwd() + '\\Logs\\'
    if not os.path.exists(log_path):
        os.mkdir(log_path)
    log_name = log_path + rq + strPQL + '.log'
    logfile = log_name
    fh = logging.FileHandler(logfile, mode='w+')
    fh.setLevel(logging.DEBUG)

    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    fh.setFormatter(formatter)

    ch.setFormatter(formatter)
    logger.addHandler(ch)

    logger.addHandler(fh)

    return logger

進入進程中再調用這個函數,然後傳入一個字符串,主要是區分這個日誌文件的,每個進程最好傳入不同的字符串。

這樣的話每個進程都有自己獨立的logger模塊,每個logger模塊都有自己獨立的日誌文件,彼此都是獨立,自然不用擔心異步的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章