python课堂整理30---- logger模块

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"。逗号后面的是毫秒
%(thread)d线程ID。可能没有
%(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() 时,会把内容多打印一遍

  

posted @ 2019-08-20 19:16  绝世刘  阅读(194)  评论(0编辑  收藏  举报