在python的logging模块中,通过 logging.getLogger() 函数可以获取到指定的logger,如果没有指定参数, 那么返回的是root logger. 通过指定不同的logger名称,这个函数可以返回指定的logger.这里,logger名字 本身体现了logger的继承关系,它通过"."分隔父logger和子logger,可以存在很多个".",他们一路继承下来。
如"a.b"这个logger存在一个父logger"a", 而"a"则从root logger继承而来。如下图所示:
每个logger下面可能存在0个或多个handler,handler实现日志的输出,每个handler对应一个输出目标。 通过配置多个handler,可以实现同时输出到文件,控制台的功能。 同时,每个handler可以定制日志级别,从而使得某些日志级别可以只输出到文件中,而不输出到控制台。
每个logger都可以设置日志级别,如果没有设置,默认是NOSET。当logger的日志级别是NOSET时,它会按照继承关系向上层获取日志级别, 直到日志级别不是NOSET,或达到root logger为止。如以上关系,
这个机制在 官方文档setLevel 中有详细介绍。
logger中,有一个字段 propagate ,这个字段用于控制是否 继承父logger的handler,默认是继承。
当这个选项打开时,logger除了将日志写入自身的handler外,还会将日志写入祖先的handler中。
假设我们往a.b这个logger写入一条日志,其过程如下:
这里需要注意的是,logger的日志级别用于在入口处过滤,handler用于出口处过滤,在propagate的时候,已经过了输入阶段,到达输出阶段, 不需要再判断上层logger的日志级别,只判断handler的级别是否满足。
转自: https://lisongmin.github.io/python-logging-inherit/
Java日志可以通过使用java.util.logging包中的Logger类来实现.
使用方法如下:
首先,需要获取一个Logger实例,可以使用Logger.getLogger()方法来获取. 例如:
Logger logger = Logger.getLogger(MyClass.class.getName())
使用logger实例记录日志. Logger类提供了多个重载的log()方法来记录不同级别的日志. 例如:
logger.info("This is an info message.")
logger.warning("This is a warning message.")
logger.severe("This is a severe message.")
可以使用logger.setLevel()方法来设置日志记录级别,只有大于等于该级别的日志才会被记录.
可以使用logger.addHandler()方法来添加日志处理器(Handler),来将日志输出到不同的地方,如控制台、文件、网络等.
使用logger.log() 可以记录不同级别的日志,可以根据需要记录不同级别的日志
可以使用logger.setUseParentHandlers(false) 取消继承父级日志处理器,只使用自己的处理器
log4j.logger.${logger名称}=${日志级别}例如:
log4j.logger.org.apache.commons=ERROR
log4j.logger.httpclient = ERROR
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)