logger模块,关于日志的一系列操作
两种使用方法
一、
import logging
logging.basicConfig(
level = logging.DEBUG, #设置级别
filename = "logger.log", #写入文件
filemode = "w", #不写这句默认为追加的模式
format = "%(asctime)s %(filename)s %(lineno)d %(message)s" #分别设置时间、文件名、程序位置、日志内容
)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical('critical message')
format 参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levename)s文本形式的日志级别
%(filename)s 调用日志输出函数的模块的文件名
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(module)s调用日志输出函数的模块名
%(funcName)s调用日志输出函数的函数名
%(lineno)d调用日志输出函数的语句所在的代码行
%(created)f当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896"。逗号后面的是毫秒
%(lineno)d调用日志输出函数的语句所在的代码行
%(created)f当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896"。逗号后面的是毫秒
%(thread)d线程ID。可能没有
%(threadName)s线程名。可能没有
%(threadName)s线程名。可能没有
%(process)d进程ID,可能没有
%(message)s用户输出的消息
二、
import logging
def logger():
logger = logging.getLogger() #不写参数默认为root用户
fh = logging.FileHandler("TEST_log") #这里参数为文件名或路径,向文件输入内容
ch = logging.StreamHandler() #向屏幕输入内容
fm = logging.Formatter("%(asctime)s %(message)s)") #设置格式
fh.setFormatter(fm) #加入格式
ch.setFormatter(fm) #加入格式
logger.addHandler(fh) #把fh功能加入logger对象
logger.addHandler(ch) #把ch功能加入logger对象
logger.setLevel("DEBUG") #设置级别
return logger
logger = logger() #调用函数
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
import logging
# def logger():
logger1 = logging.getLogger("mylogger")#不写参数默认为root用户
logger1.setLevel("DEBUG")
logger2 = logging.getLogger("mylogger")
logger2.setLevel("INFO")
fh = logging.FileHandler("my_new.log") #这里参数为文件名或路径,向文件输入内容
ch = logging.StreamHandler() #向屏幕输入内容
fm = logging.Formatter("%(asctime)s %(message)s)") #设置格式
fh.setFormatter(fm)
ch.setFormatter(fm)
logger1.addHandler(fh)
logger2.addHandler(fh)
logger1.addHandler(ch)
logger2.addHandler(ch)
# return logger
# logger1 = logger()
logger1.debug("debug1")
logger1.info("info1")
logger1.warning("warning1")
logger1.error("error1")
logger1.critical("critical1")
logger2.debug("debug2")
logger2.info("info2")
logger2.warning("warning2")
logger2.error("error2")
logger2.critical("critical2")
上面代码中,logger1和logger2中设置的级别不一样,但是输出的级别却是一样
因为用户参数用的都是 mylogger, 下面设置的级别把上面的覆盖了
特殊情况:
mport logging
# def logger():
logger = logging.getLogger()
logger1 = logging.getLogger("mylogger")#不写参数默认为root用户
# logger.setLevel("DEBUG")
# logger1.setLevel("DEBUG")
fh = logging.FileHandler("my_new.log") #这里参数为文件名或路径,向文件输入内容
ch = logging.StreamHandler() #向屏幕输入内容
fm = logging.Formatter("%(asctime)s %(message)s)") #设置格式
fh.setFormatter(fm)
ch.setFormatter(fm)
logger1.addHandler(fh)
logger.addHandler(fh)
logger1.addHandler(ch)
logger.addHandler(ch)
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
logger1.debug("debug1")
logger1.info("info1")
logger1.warning("warning1")
logger1.error("error1")
logger1.critical("critical1")
当logger1里有参数,而且检测到有logger() 时,会把内容多打印一遍