#!/usr/bin/env python
# -*- coding: utf-8 -*- """
__title__ = logging工具类
__Time__ = 2019/8/8 19:26
"""
import logging
import os
import sys
import time
from logging import handlers class Loggers:
__instance = None def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls, *args, **kwargs)
return cls.__instance def __init__(self):
# 设置输出格式
formater = logging.Formatter(
'[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[%(funcName)s:%(lineno)d] : %(message)s')
# 定义一个日志收集器
self.logger = logging.getLogger('log')
# 设定级别
self.logger.setLevel(logging.DEBUG)
# 获取文件名
now = time.strftime(
'%Y%m%d%H', time.localtime(time.time())) + '.log'
execfile = sys.argv[0]
if "/" in execfile:
pre = execfile[sys.argv[0].rindex("/") + 1:sys.argv[0].rindex(".")]
else:
pre = execfile[0:sys.argv[0].rindex(".")]
path = os.path.join(sys.path[0], 'log')
if os.path.exists(path) == False:
os.mkdir(path)
logfilename = os.path.join(path, pre + now)
# 输出渠道一 - 文件形式
self.fileLogger = handlers.RotatingFileHandler(logfilename, maxBytes=5242880, backupCount=3, encoding="utf-8") # 输出渠道二 - 控制台
self.console = logging.StreamHandler()
# 控制台输出级别
self.console.setLevel(logging.DEBUG)
# 输出渠道对接输出格式
self.console.setFormatter(formater)
self.fileLogger.setFormatter(formater)
# 日志收集器对接输出渠道
self.logger.addHandler(self.fileLogger)
self.logger.addHandler(self.console) # def debug(self, msg):
# self.logger.debug(msg=msg)
#
# def info(self, msg):
# self.logger.info(msg=msg)
#
# def warn(self, msg):
# self.logger.warning(msg=msg)
#
# def error(self, msg):
# self.logger.error(msg=msg)
#
# def excepiton(self, msg):
# self.logger.exception(msg=msg) def getLog(self):
return self.logger

随便封装下log的更多相关文章

  1. 随便记录下系列 - node->express

    随便记录下系列 - node->express 文章用啥写?VsCode. 代码用啥写?VsCode. 编辑器下载:VsCode 一.windows下安装node.js环境: 下载地址 相比以前 ...

  2. Android 下log的使用总结

    Android 下log的使用总结 一:在源码开发模式下 1:包含头文件: #include <cutils/log.h> 2:定义宏LOG_TAG #define LOG_TAG &qu ...

  3. PHP.TP框架下商品项目的优化3-php封装下拉框函数

    php封装下拉框函数 因为在项目中会经常使用到下拉框,所以根据一个表中的数据制作下拉框函数,以便调用 //使用一个表的数据做下拉框函数 function buildSelect($tableName, ...

  4. 封装dropdown模块(使用到之前写好的动画组件,封装下拉菜单)

    用 showhide 改写dropdown 模块: 1.首先在 css中新增动画相关样式 /*showhide组件的样式*/ .fadeOut{ opacity:; visibility: hidde ...

  5. 自己封装一个Log模块

    Unity自己有log系统,为什么要自己封装一个 1.不好用,只能在pc上记录log文件,移动平台是没有的 2.在开发时期的log,不想在正式版里面出现.没有一个统一的开关来控制是不是要显示log,要 ...

  6. Dapper小型ORM的使用(随便吐槽下公司)

    近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~).用来用去都觉的有一 ...

  7. 实现在Android 下log的使用总结

    一:在源码开发模式下 1:包含头文件: #include <cutils/log.h>   2:定义宏LOG_TAG #define LOG_TAG "MY LOG TAG&qu ...

  8. 路由器基础配置之ppp封装下的pap,chap认证

    我们将以上面的拓扑图完成本次实验,路由器的默认封装为HDLC,要求为把路由器全被更改为ppp封装,并在router3与router4之间用pap认证,在router4与router5之间用chap认证 ...

  9. IE 下 log 调试的一点不同

    介绍一点IE下控制台调试与chrome的区别 数组 alert([1,2]) console.log([1,2]) console.log([1,2],"1,2") alert I ...

  10. 封装下Excel导出

    1. 使用方法 1.1 对象使用注解 @ExcelColumn(name = "页面1",freeze = "0,1,1,2",autoWidth=true) ...

随机推荐

  1. CC1,3,6回顾

    前言 前面陆续学习了CC1,CC3,CC6,以及TemplatesImpl以及改造,有点乱,正所谓温故而知新嘛,所以这篇就回顾一下,捋一捋,解决一些细节问题. CC1 由于CC1要介绍CC链的几个关键 ...

  2. nacos集群搭建和反向代理

    搭建环境 安装ngin https://www.linuxprobe.com/linux-install-nginx.html 配置jdk1.8 https://blog.csdn.net/qq_42 ...

  3. 1. PyQt5开发环境的搭建

    专栏地址 ʅ(‾◡◝)ʃ 因为我个人使用的是 Linux 还有之前用过Windows 没用过 Mac 所以这里我简单结束 Linux 和 Windows 开发环境的搭建 Windows 开发PyQt5 ...

  4. php+nginx环境搭建

    PHP安装教程参考:https://www.cnblogs.com/kyuang/p/6801942.html 1.安装基础环境: yum -y install gcc bison bison-dev ...

  5. K8S的架构及工作原理

    1.Master和Node 1).Master K8S中的Master是集群控制节点,负责整个集群的管理和控制 在Master上运行着以下关键进程: kube-apiserver:提供了HTTP Re ...

  6. 利用python数据分析

    利用python进行数据分析 本书由Python pandas项目创始人Wes McKinney亲笔撰写,详细介绍利用Python进行操作.处理.清洗和规整数据等方面的具体细节和基本要点.第2版针对P ...

  7. python @property的介绍与使用

    python @property的介绍与使用 python的@property是python的一种装饰器,是用来修饰方法的. 作用: 我们可以使用@property装饰器来创建只读属性,@proper ...

  8. Appium工具

    1.安装 (1)jdk安装以及环境配置 a.jdk下载地址:https://www.oracle.com/cn/java/technologies/downloads/ 新建系统环境变量: b.编辑P ...

  9. MongoDB 强制使用索引 hint

    转载请注明出处: 虽然MongoDB 查询优化器一般工作的很不错,但是也可以使用 hint() 来强迫 MongoDB 使用一个特定的索引.在这种方法下某些情形下会提升性能. 一个有索引的 colle ...

  10. TypeError: __str__ returned non-string (type WebStepInfo)

    错误代码: class CaseStep(models.Model): id = models.AutoField(primary_key=True) casetep = models.Foreign ...