python之公共方法---日志
来源:互联网 发布:linux less命令 退出 编辑:程序博客网 时间:2024/05/29 13:19
# -*- coding:utf-8 -*-
'''
Created on 2014-9-4
@author: yuzhongfu
import sys
CRITICAL = 50
ERROR = 40
WARNING = 30
INFO = 20
DEBUG = 10
NOTSET = 0
"""
_logger_level = 30
_dictLogger = {}
_default_log_name = "common_api.log"
__doc__ = """"""
class LogManage:
def __init__(self,strFileName=_default_log_name,
debug=_logger_level,
bShowStreamLog = False,
strSaveLogPath = None):
self.__logger = None
# 保存日志的文件名
self.__strFileName = strFileName
# 保存日志的文件路径
self.__strSaveLogPath = strSaveLogPath
# 单个文件大小设置为20M
self.__nLogFileSize = 20*1024*1024
# 最多保存10个文件
self.__nLogFileNum = 10
# 日志级别
self.__nLogLevel = debug
# 是否显示流日志
self.__bShowStreamLog = bShowStreamLog
# 日志格式
self.__objLogFormat = "[%(asctime)s][%(filename)s][%(lineno)s][thread:%"
self.__objLogFormat += "(thread)s][process:%(process)s][%(levelname)s] %(message)s"
self.__initLogger()
def __initLogger(self):
# 同一个logger只允许初始化一次
global _dictLogger
logger = _dictLogger.get(self.__strFileName,None)
if logger != None:
self.__logger = logger
return
# 保存的文件夹不存在,则创建
dirFileName = os.path.dirname(self.__strFileName)
strFileName = os.path.basename(self.__strFileName)
if dirFileName == "" or dirFileName == ".":
dirFileName = sys.path[0]
dirFileName = os.path.join(dirFileName,"logs")
if self.__strSaveLogPath:
dirFileName = os.path.join(self.__strSaveLogPath,"logs")
dirFileName = os.path.realpath(dirFileName)
if not os.path.exists(dirFileName):
os.makedirs(dirFileName)
self.__strFileName = os.path.join(dirFileName,strFileName)
# 文件handler
fileHandler = logging.handlers.RotatingFileHandler(self.__strFileName,
maxBytes = self.__nLogFileSize,
backupCount = self.__nLogFileNum)
# 实例化formatter
formatter = logging.Formatter(self.__objLogFormat)
fileHandler.setFormatter(formatter)
self.__logger = logging.getLogger(self.__strFileName)
# 为logger添加handler
self.__logger.addHandler(fileHandler)
_dictLogger[self.__strFileName] = self.__logger
# 增加一个流handler
steamHandler = logging.StreamHandler()
steamHandler.setFormatter(formatter)
self.steamHandler = steamHandler
if self.__bShowStreamLog:
self.__logger.addHandler(steamHandler)
#设置日志级别
self.__logger.setLevel(self.__nLogLevel)
def addStreamHandler(self):
# 增加一个流handler
try:
# 如果已经增加直接返回
if self.__strShowStreamLog:
return
self.__logger.addHandler(self.steamHandler)
self.__strShowStreamLog = True
except:
pass
def setLogLevel(self,logLevel):
# 重新设置日志级别
self.__logger.setLevel(self.__nLogLevel)
def getLogger(self):
return self.__logger
def get_logger(strFileName=_default_log_name,
debug=_logger_level,
showStreamLog = False,
saveLogPath = None):
global _dictLogger
logger = _dictLogger.get(strFileName,None)
if logger != None:
return logger
objLogger = LogManage(strFileName,debug,showStreamLog,saveLogPath)
logger = objLogger.getLogger()
return logger
def _testLog():
logger = get_logger(strFileName="log_api.log",
debug=30,
showStreamLog=True,
saveLogPath=None)
logger.error("ERROR-ERROE-"*5)
logger.debug("DEBUG-DEBUG-"*5)
objLogger = LogManage("nameas.log")
logger = objLogger.getLogger()
for item in xrange(1):
logger.error("%5d"%item*50)
if __name__ == "__main__":
_testLog()
'''
Created on 2014-9-4
@author: yuzhongfu
'''
import sys
import logging.handlers
CRITICAL = 50
ERROR = 40
WARNING = 30
INFO = 20
DEBUG = 10
NOTSET = 0
"""
_logger_level = 30
_dictLogger = {}
_default_log_name = "common_api.log"
__doc__ = """"""
class LogManage:
def __init__(self,strFileName=_default_log_name,
debug=_logger_level,
bShowStreamLog = False,
strSaveLogPath = None):
self.__logger = None
# 保存日志的文件名
self.__strFileName = strFileName
# 保存日志的文件路径
self.__strSaveLogPath = strSaveLogPath
# 单个文件大小设置为20M
self.__nLogFileSize = 20*1024*1024
# 最多保存10个文件
self.__nLogFileNum = 10
# 日志级别
self.__nLogLevel = debug
# 是否显示流日志
self.__bShowStreamLog = bShowStreamLog
# 日志格式
self.__objLogFormat = "[%(asctime)s][%(filename)s][%(lineno)s][thread:%"
self.__objLogFormat += "(thread)s][process:%(process)s][%(levelname)s] %(message)s"
self.__initLogger()
def __initLogger(self):
# 同一个logger只允许初始化一次
global _dictLogger
logger = _dictLogger.get(self.__strFileName,None)
if logger != None:
self.__logger = logger
return
# 保存的文件夹不存在,则创建
dirFileName = os.path.dirname(self.__strFileName)
strFileName = os.path.basename(self.__strFileName)
if dirFileName == "" or dirFileName == ".":
dirFileName = sys.path[0]
dirFileName = os.path.join(dirFileName,"logs")
if self.__strSaveLogPath:
dirFileName = os.path.join(self.__strSaveLogPath,"logs")
dirFileName = os.path.realpath(dirFileName)
if not os.path.exists(dirFileName):
os.makedirs(dirFileName)
self.__strFileName = os.path.join(dirFileName,strFileName)
# 文件handler
fileHandler = logging.handlers.RotatingFileHandler(self.__strFileName,
maxBytes = self.__nLogFileSize,
backupCount = self.__nLogFileNum)
# 实例化formatter
formatter = logging.Formatter(self.__objLogFormat)
fileHandler.setFormatter(formatter)
self.__logger = logging.getLogger(self.__strFileName)
# 为logger添加handler
self.__logger.addHandler(fileHandler)
_dictLogger[self.__strFileName] = self.__logger
# 增加一个流handler
steamHandler = logging.StreamHandler()
steamHandler.setFormatter(formatter)
self.steamHandler = steamHandler
if self.__bShowStreamLog:
self.__logger.addHandler(steamHandler)
#设置日志级别
self.__logger.setLevel(self.__nLogLevel)
def addStreamHandler(self):
# 增加一个流handler
try:
# 如果已经增加直接返回
if self.__strShowStreamLog:
return
self.__logger.addHandler(self.steamHandler)
self.__strShowStreamLog = True
except:
pass
def setLogLevel(self,logLevel):
# 重新设置日志级别
self.__logger.setLevel(self.__nLogLevel)
def getLogger(self):
return self.__logger
def get_logger(strFileName=_default_log_name,
debug=_logger_level,
showStreamLog = False,
saveLogPath = None):
global _dictLogger
logger = _dictLogger.get(strFileName,None)
if logger != None:
return logger
objLogger = LogManage(strFileName,debug,showStreamLog,saveLogPath)
logger = objLogger.getLogger()
return logger
def _testLog():
logger = get_logger(strFileName="log_api.log",
debug=30,
showStreamLog=True,
saveLogPath=None)
logger.error("ERROR-ERROE-"*5)
logger.debug("DEBUG-DEBUG-"*5)
objLogger = LogManage("nameas.log")
logger = objLogger.getLogger()
for item in xrange(1):
logger.error("%5d"%item*50)
if __name__ == "__main__":
_testLog()
0 0
- python之公共方法---日志
- Python学习笔记 -公共方法
- Python 之循环日志
- Python 之 日志logging
- Python之日志使用
- python之日志配置
- Python中非字符串变量公共方法
- Python学习二:公共日志记录模块封装
- STL 之容器中的公共方法
- Java集合框架之List公共方法
- JAVA 公共方法 之 date时间处理
- Python日志之Python控制流
- Python学习日志之Python函数
- Python学习日志之Python数据结构初识
- 【Python】Python 日志实践之logging模块
- 公共日志过程
- 公共方法
- 公共方法
- 关于Redis的常识
- LeetCode100——Same Tree
- Smallest Regular Polygon - UVa 12300 几何
- 基于OAUTH的电子商务支付集成研究与实现
- Python-MySQL-2
- python之公共方法---日志
- 4 Sum
- apt和dpkg 详解
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(四)
- 初步感受一下非阻塞的socket
- Myeclipse 10 for mac 安装过程及myeclipse 10 for mac 破解版下载
- JAVA学习笔记32——hashCode和equals方法+set接口
- Context-----Activity,Application之间的交流使者
- jquer ajax webservice 500 Internal Server Erro