import logging
import os.path
import time
class Log(object):
my_log = logging.getLogger()
def __init__(self):
# 创建自己的日志收集器
# self.my_log = logging.getLogger("my_log")
# 设置收集的日志等级,设置为DEBUG等级
self.my_log.setLevel("DEBUG")
# 日志输出渠道
# 创建一个日志输出渠道(输出到控制台),并且设置输出的日志等级为INFO以上
self.l_s = logging.StreamHandler()
self.l_s.setLevel("DEBUG")
# 创构建一个日志输出渠道(输出到文件)
current_time = time.strftime('%Y%m%d', time.localtime(time.time())) # 返回当前时间
new_name = os.getcwd() + '/logs/' # 在该路径下新建下级目录
is_exists = os.path.exists(new_name) # 判断该目录是否存在
if not is_exists:
os.makedirs(new_name)
print(new_name + "目录创建成功")
else:
# 如果目录存在则不创建,并提示目录已存在
print(new_name + "目录已存在")
new_name = new_name + current_time + "_"
l_f = logging.FileHandler(new_name + "error.log", encoding='utf8')
l_f.setLevel("ERROR") # 设置输出的日志等级为ERROR以上
l_d = logging.FileHandler(new_name + "debug.log", encoding='utf-8')
l_d.setLevel("DEBUG") # 设置输出的日志等级为DEBUG以上
cc = logging.FileHandler(new_name + "info.log", encoding='utf-8')
cc.setLevel("INFO") # 设置输出的日志等级为INFO以上
# 将日志输出渠道添加到日志收集器中
self.my_log.addHandler(self.l_s)
self.my_log.addHandler(l_f)
self.my_log.addHandler(l_d)
self.my_log.addHandler(cc)
# 设置日志输出的格式
# 可以通过logging.Formatter指定日志的输出格式,这个参数可以输出很多有用的信息,如下:
# % (name)s: 收集器名称
# % (levelno)s: 打印日志级别的数值
# % (levelname)s: 打印日志级别名称
# % (pathname)s: 打印当前执行程序的路径,其实就是sys.argv()
# % (filename)s: 打印当前执行程序名
# % (funcName)s: 打印日志的当前函数
# % (lineno)d: 打印日志的当前行号
# % (asctime)s: 打印日志的时间
# % (thread) d: 打印线程ID
# % (threadName)s: 打印线程名称
# % (process) d: 打印进程ID
# % (message) s: 打印日志信息
ft = "%(asctime)s - [%(filename)s -->line:%(lineno)d] - %(levelname)s: %(message)s" # 工作中常用的日志格式
ft = logging.Formatter(ft)
# 设置控制台和日志文件输出日志的格式
self.l_s.setFormatter(ft)
l_f.setFormatter(ft)
l_d.setFormatter(ft)
cc.setFormatter(ft)
@classmethod
def info(cls, msg):
cls.my_log.info(msg)
return
@classmethod
def error(cls, msg):
cls.my_log.error(msg)
return
@classmethod
def debug(cls, msg):
cls.my_log.debug(msg)
if __name__ == '__main__':
my_log = Log().my_log
ss = "一条小日志"
my_log.info(ss)
my_log.debug(ss)
my_log.error(ss)