python的日志模块_Python自定义日志模块

Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待

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: chenhaomingbob@163.com

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: chenhaomingbob@163.com

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: chenhaomingbob@163.com

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值