python中语句的条件日志级别?

New*_*Guy 4 python logging

有没有办法动态设置我希望将语句记录为哪个日志级别?

我有这个代码:

logging.info("Data Set Size => {0}".format(len(data)))
logging.info("Training Set Size => {0}".format(len(train)))
logging.info("Test Set Size => {0}".format(len(test)))
logging.info("Entire data set allocated => {0}".format(len(data) == len(train) + len(test)))
Run Code Online (Sandbox Code Playgroud)

它非常好地输出与此类似的内容,具体取决于我设置的格式:

root        : INFO     Data Set Size => 10000
root        : INFO     Training Set Size => 7500
root        : INFO     Test Set Size => 2500
root        : INFO     Entire data set allocated => True
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,如果最后一行中的逻辑检查是False,我可以将该级别设置为 a.warning吗?

我可以做这样的事情:

if len(data) == len(train) + len(test):
    logging.info("Entire data set allocated => {0}".format(True)
else:
    logging.warning("Entire data set allocated => {0}".format(False)
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法在更少的行中做到这一点?

Mar*_*ers 6

使用Logger.log()代替以级别命名的函数;这需要一个级别作为第一个参数:

entire_set = len(data) == len(train) + len(test)
logging.log(logging.WARNING if entire_set else logging.INFO,
            "Entire data set allocated => {0}".format(entire_set))
Run Code Online (Sandbox Code Playgroud)

logging.warning()logging.info()功能仅仅是用于调用快捷方式logging.log()与给定的日志级别。

您可能希望切换到使用专用Logger对象而不是使用模块级函数;它将允许您更精细地配置日志记录并通过记录器名称跟踪日志消息的来源。