4999元包郵
去購買 >
使用者故事:
訓練神經網路的時候,我們的網路結構是有乙個train.py檔案,用來初始化model需要的東西,然後在每個epoch裡面呼叫另外乙個function.py檔案來做真正的model訓練。
此時有個需求,想要這兩個檔案列印的logger都列印到同乙個檔案裡面。因此根據上網檢索大致自定義了乙個管理日誌的模組。
遇到的問題
如果直接在function裡面生成日誌並列印的話,會建立多個logger物件,會導致乙個資訊會列印多此。
因此可以用乙個global來解決多個logger。
解決方法
下面演示大致的流程。主要包含三個檔案,日誌都列印在同乙個檔案下面
utils_log.py - logger的生成工廠
test1.py - 列印日誌並且在迴圈裡面呼叫test2.py
test2.py - 列印日誌
utils_log.py
#!/usr/bin/python
# -*- coding:utf8 -*-
author: haoming chen
e-mail: [email protected]
time: 2020/06/03
description:
import logging
import time
import os
from sheen import coloredhandler
from project_utils import utils_io_folder
class logfactory(object):
def __init__(self, logger=none, log_dir="", phase='train'):
指定儲存日誌的檔案路徑,日誌級別,以及呼叫檔案
將日誌存入到指定的檔案中
self.log_path = os.path.join(os.getcwd(), "log") if log_dir == "" else log_dir
utils_io_folder.create_folder(self.log_path)
# 建立乙個logger
self.logger = logging.getlogger(logger)
self.logger.addhandler(coloredhandler())
self.logger.setlevel(logging.debug)
self.log_name = os.path.join(self.log_path, "{}-{}.log".format(phase, time.strftime("%y_%m_%d_%h")))
self.logger.addhandler(coloredhandler())
# create file handler which logs even debug messages
file_handler = logging.filehandler(self.log_name)
file_handler.setlevel(logging.debug)
# create console handler with a higher log level
console_handler = logging.streamhandler()
console_handler.setlevel(logging.info)
# # 再建立乙個handler,用於輸出到控制台
formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setformatter(formatter)
console_handler.setformatter(formatter)
self.logger.addhandler(file_handler)
self.logger.addhandler(console_handler)
def get_log(self):
return self.logger
test1~~~~.py
#!/usr/bin/python
# -*- coding:utf8 -*-
author: haoming chen
e-mail: [email protected]
time: 2020/06/10
description:
from common.utils_log import logfactory
logger = none
def test():
global logger
if logger == none:
logger = logfactory(__name__, log_dir="f:/", phase='train').get_log()
for i in range(10):
logger.info("test1-1-{}".format(i))
test2.py
#!/usr/bin/python
# -*- coding:utf8 -*-
author: haoming chen
e-mail: [email protected]
time: 2020/06/10
description:
from common.utils_log import logfactory
from test_log import test1
def main():
logger = logfactory(__name__, log_dir="f:/", phase='train').get_log()
for i in range(10):
test1.test()
logger.info("test2-1-{}".format(i))
for i in range(10):
logger.info("test2-2-{}".format(i))
if __name__ == '__main__':
main()
python的日誌模組
date 2019 06 28 autor wangxc 功能 1.寫日誌功能,當沒有傳入日誌寫入路徑時,他會將 本檔名.log 的日誌檔案存放到指令碼同路徑下 例子 指令碼路徑在c logger.py,那麼生成的日誌檔案logger.log將會在c 下存在 2.可以傳入日誌的級別,控制日誌輸出的形...
python日誌模組
logging.debug 10 logging.info 20 logging.warning 30 logging.error 40 logging.critical 50預設級別為warning 預設輸出位置為控制台 import logging logging.basicconfig 可用引...
python 日誌模組
在軟體或者系統發生錯誤時可以通過日誌快速定位到錯誤,從而定位問題,解決問題。logging模組提供的日誌記錄函式所使用的日誌器設定的日誌級別是warning,因此只有warning級別的日誌記錄以及大於它的error和critical級別的日誌記錄被輸出了,而小於它的debug和info級別的日誌記...