一些关于logging部分的代码笔记以及讲解
2017-12-06 20:29
483 查看
写一个关于logging的实践项目,以加深对上一篇博客知识的学习:
以下是对logging 类的定义
以下是对logger在具体代码中的使用
下一节会讲一下,命令行参数的解析过程。放学!回家!~~~~~
以下是对logging 类的定义
import os,os.path as osp import time # 使用 time 模块的 strftime 方法来格式化日期 def strftime(t=None): return time.strftime("%Y%m%d-%H%M%S",time.localtime(t or time.time())) # 下面是logging类的定义 import logging from logging.handlers import TimeRotatingFileHandler logging.basicConfig.format="[%(asctime)s][%(module)s.%(funcNames)s]%(message)s" # 设置每行日志默认的前缀 DEFAULT_LEVEL=logging.INFO DEFAULT_LOGGING_DIR=osp.join("logs","gcforest") # 设置日志默认的目录,当然后面还可以有所变化 fh=None # 默认日志句柄的设置 # 以下是句柄初始化,通过日志路径(logging_path)来初始化句柄,并设置句柄的格式(logging.Formatter) def init_fh(): global fh if fh is not None: return if DEFAULT_LOGGING_DIR is not None return if not osp.exists(DEFAULT_LOGGING_DIR): os.mkdirs(DEFAULT_LOGGING_DIR) logging_path=osp.join(DEFAULT_LOGGING_DIR,strftime()+".log") fh=logging.FileHandler(logging_path) formatter=logging.Formatter("[%(asctime)s][%(module)s.%(funcNames)s]%(message)s") fh.setFormatter(formatter) def updata_dafault_level(default_level): global DEFAULT_LEVEL DEFAULT_LEVEL=default_level def update_default_logging_dir(default_logging_dir): global DEFAULT_LOGGING_DIR DEFAULT_LOGGING_DIR=default_logging_dir 4000 def get_logger(name="gcforest",level=None): level=level or DEFAULT_LEVEL logger=logging.getlogger(name) logger.setLevel(level) init_fh() if fh is not None: logger.addHandler(fh) return logger
以下是对logger在具体代码中的使用
import sys, os, os.path as osp import argparse import logging import numpy as np import json sys.path.insert(0, 'lib') from gcforest.utils.log_utils import get_logger, update_default_level, update_default_logging_dir from gcforest.utils.config_utils import load_json # 读取命令行的参数,供main函数进行解析 def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('-model', dest='model', type=str, help='gcfoest Net Model File', default="models/mnist/forest/tree500-depth100-3folds.json") parser.add_argument('-save_outputs', dest='save_outputs', action="store_true", help="Save outputs") parser.add_argument('-log_dir', dest='log_dir', type=str, default=None, help='Log file directory') args = parser.parse_args() return args if __name__ == '__main__': args = parse_args() config = load_json(args.model) update_default_level(logging.DEBUG) if args.log_dir is not None: update_default_logging_dir(args.log_dir) from gcforest.fgnet import FGTrainConfig from gcforest.datasets import get_dataset # 只需要在代码相应的地方生成logger实例,就可以通过实例名.info输出要打印的日志信息 LOGGER = get_logger("tools.train_fg") # 返回一个logger实例,如果没有指定name,返回root logger。只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例 LOGGER.info("tools.train_fg") # 这是日志具体输出的信息,对应于 %(message)s LOGGER.info("\n" + json.dumps(config, sort_keys=True, indent=4, separators=(',', ':')))#这也是日志具体的输出信息 train_config = FGTrainConfig(config["train"])
下一节会讲一下,命令行参数的解析过程。放学!回家!~~~~~
相关文章推荐
- 关于SSL/TLS中AES安全性|BEAST攻击的详细步骤以及RC4强度的一些笔记
- 关于JSP的Cookie的入门学习,以及部分代码的备注解释
- 编程珠玑学习笔记 Aha算法 思考以及一些代码实现
- (重点章节复习以及代码调整笔记)选择器:伪类和伪元素选择器(部分)
- 关于Smail代码的一些简单讲解
- 第四章 控制执行流程的一些笔记以及关于char的一点东西
- boolan web Ex笔记 三 关于button以及部分CSS3属性
- swift 代码创建UITableView以及部分swift的讲解
- 【代码笔记】关于UIFont的一些define
- 关于git 账户配置以及代码克隆的部分总结
- 看代码过程中碰到的一些问题以及笔记
- 【代码笔记】关于UIFont的一些define
- 机器学习笔记八 - SVM(Support Vector Machine,支持向量机)的剩余部分。即核技法、软间隔分类器、对SVM求解的序列最小化算法以及SVM的一些应用
- 关于LDA学习的一些有用的博客以及大牛写的代码实现
- 记录一些老外关于Unity3D网络部分的博客讲解
- 关于Android大数据收集,埋点统计的详细讲解以及案例代码分析附github代码
- 关于Socket与Http协议的一些总结以及部分个人看法
- 【主题】关于做代码以及文档review的一些问题
- 战斗场景的大致思路以及部分代码
- Caffe学习笔记1-安装以及代码结构