python - Python 对象实例可以同时具有不同的记录器级别吗?
问题描述
我希望程序中的不同对象具有不同的日志记录级别。那可能吗?
我创建了一个基类,如下所示,其中包含设置日志记录级别的方法。
class Logging():
""" Utility class for common methods."""
logging_levels = ['DEBUG','INFO']#,'WARNING','ERROR'
@property
def verbosity(self):
return self.__verbosity
@verbosity.setter
def verbosity(self,verbosity):
"""Method to set verbosity of logging on terminal. Different classes may have different levels of verbosity."""
assert verbosity in self.logging_levels, '{} is not a valid logging level!'.format(verbosity)
self.__verbosity = verbosity
#Set logging level - {DEBUG,INFO,WARNING,ERROR}
if verbosity == 'DEBUG':
logging.getLogger().setLevel(logging.DEBUG)
elif verbosity == 'INFO':
logging.getLogger().setLevel(logging.INFO)
elif verbosity == 'WARNING':
logging.getLogger().setLevel(logging.INFO)
print('{}:Logging level is set to:{}'.format(self.name,verbosity))
return self.__verbosity
我的另外两个类继承自“Logging”类,我在它们各自的init方法中有以下内容:
self.verbosity = verbosity
但是,我观察到的是,每当使用任一类的实例来设置日志记录级别时,都会全局设置日志记录级别。有没有办法将日志记录级别限制为特定的类实例?
编辑:使用 John Gordon 的建议,我想出了一个解决方案。请看下文。
解决方案
if verbosity == 'DEBUG':
logging.getLogger().setLevel(logging.DEBUG)
elif verbosity == 'INFO':
logging.getLogger().setLevel(logging.INFO)
elif verbosity == 'WARNING':
logging.getLogger().setLevel(logging.INFO)
不带名称调用getLogger()
会返回根记录器。
因此,所有这些调用都在根记录器上运行,删除任何以前的设置。
解决此问题的一种方法是在调用时提供名称getLogger()
,并确保每个类实例的名称不同。
推荐阅读
- c# - 绑定 AuthenticationConfig 抛出异常
- c# - 使用实体框架在数据库中插入记录的问题
- java - 如何从 ArrayList 中删除一个项目
> - gps - 使用 VectorNav VN100 IMU 的路径映射来映射两个 GPS 坐标之间的路线
- angular - Angular Sourcemap 鼠标悬停在谷歌浏览器检查/调试模式下缺少的信息上
- python - 用于在 Keras 中输出的序列的 LSTM
- sql - 使用 ROLLBACK TO SAVEPOINT 条件
- elasticsearch - 索引 Elasticsearch 索引中的每个字段是否有缺点?
- python - 将 pandas 数据框写入 Excel 命名范围
- docker - 如何在 Dockerfile 的 RUN 中设置环境变量?