一些关于logging部分的代码笔记以及讲解
来源:互联网 发布:windows 10桌面太亮 编辑:程序博客网 时间:2024/05/23 01:14
写一个关于logging的实践项目,以加深对上一篇博客知识的学习:
以下是对logging 类的定义
import os,os.path as ospimport 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 TimeRotatingFileHandlerlogging.basicConfig.format="[%(asctime)s][%(module)s.%(funcNames)s]%(message)s" # 设置每行日志默认的前缀DEFAULT_LEVEL=logging.INFODEFAULT_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_leveldef update_default_logging_dir(default_logging_dir): global DEFAULT_LOGGING_DIR DEFAULT_LOGGING_DIR=default_logging_dirdef 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 ospimport argparseimport loggingimport numpy as npimport jsonsys.path.insert(0, 'lib')from gcforest.utils.log_utils import get_logger, update_default_level, update_default_logging_dirfrom 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 argsif __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"])
下一节会讲一下,命令行参数的解析过程。放学!回家!~~~~~
阅读全文
0 0
- 一些关于logging部分的代码笔记以及讲解
- 关于Smail代码的一些简单讲解
- 关于 logging 的一些琐事
- 关于logging.DEBUG 很好的讲解
- 记录一些老外关于Unity3D网络部分的博客讲解
- 关于git 账户配置以及代码克隆的部分总结
- 关于firebug的一些讲解
- 关于as400的一些讲解
- 【主题】关于做代码以及文档review的一些问题
- 关于动作的一些个人代码以及旋转源代码
- 关于 log4j.jar 和 commons-logging.jar 的一些记录
- 看代码过程中碰到的一些问题以及笔记
- kit 部分代码讲解
- 关于Socket与Http协议的一些总结以及部分个人看法
- 关于JSP的Cookie的入门学习,以及部分代码的备注解释
- 【代码笔记】iOS-关于UIFont的一些define
- 关于Windows CE菜单的一些讲解
- 关于循环队列的一些讲解
- G
- 互联网DSP广告系统架构及关键技术解析 | 广告行业资深架构师亲述
- DIV+CSS上中下左中右布局案例
- Python-set函数
- opencv实现人脸眼睛的检测
- 一些关于logging部分的代码笔记以及讲解
- scikit-learn 常用模型介绍及使用(下)
- Android ScrollView去掉滚动条及ScrollView属性
- Android流失布局
- Oracle数据库整理笔记
- idea使用maven构建mybatis程序遇到的几个问题
- 现代操作系统在之死锁
- 见微知著:语义分割中的弱监督学习
- LeetCode 540. Single Element in a Sorted Array