python - 如何获取 logging.LogRecord 对象的格式化字符串

标签 python python-2.7 logging

我只想将一些 INFO 日志消息打印到控制台和日志文件。我用 StreamHandler 和 FileHandler 创建了一个记录器。我将所有消息打印到文件,而不是控制台中的错误和严重错误。下面是我的日志配置。

# create logger
self.logger = logging.getLogger(__name__)
self.logger.setLevel(logging.DEBUG)

# Prints only ERROR CRITICAL to stdout
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)

# Prints ALL log levels to file
fh = logging.FileHandler(self.logFile, 'w')
fh.setLevel(logging.DEBUG)

# create formatter
self.formatLogMessage = '[[%(asctime)s]\t[%(levelname)s]\t[%(filename)s]\t[%(funcName)s]\t[%(processName)s]]\t%(message)s'
formatter = logging.Formatter(self.formatLogMessage)

# add formatter
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# add ch to logger
self.logger.addHandler(fh)
self.logger.addHandler(ch)

现在 logger.info() 只打印到文件。

假设我想强制打印一些信息消息到控制台。我写了一个方法 - printInfoConsole 显式打印到控制台以及日志为:

# Method to print Info to both log and console
def __printInfoConsole(self, msg, fnName="validate"):
  name = os.path.basename(__file__)
  record = self.logger.makeRecord(self.logger.name,logging.INFO,name,None,msg=msg,args=None,exc_info=None,func=fnName)
  self.logger.handle(record)
  print(record)

这会打印到日志文件和控制台。但是,当我执行“打印(记录)”时格式不正确:

<LogRecord: __main__, 20, compare_fusionapps.py, None, "bi_cluster: 'fusion.FADomain.bi_cluster.default.minmaxmemory.main' is not set on target.">

与日志文件中的对比为:

[[2019:04:11 15:34:11,474       [INFO]  [compare_fusionapp.py]  [validate]]     bi_cluster: 'fusion.FADomain.bi_cluster.default.minmaxmemory.main' is not set on target.

我试过 record.getMessage(),但它只给出了消息,没有格式化。 如何确保我的控制台日志输出与日志文件匹配。

最佳答案

您需要将 Formatter 应用于 LogRecord。

print(formatter.format(record))

关于python - 如何获取 logging.LogRecord 对象的格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55630419/

相关文章:

python - 造轮失败/"Error: INCLUDE Environment Variable is empty"

python - 根据每个嵌套列表的总和对列表列表进行排序

c# - Windows Phone 原生 std::cout

支持 ssh-dss 公钥算法的 Python FTP 实用程序

python - 在 django 模型中自动生成席位

python - 如何将数据存储在数据库中以标识在服务器上启动的进程

android - 格式错误的加密 mp3 到 m3u8

Python 无法识别 Django 安装。 (导入错误 : No module named django)

ruby-on-rails - 多服务器 Ruby on Rails 生产日志记录

logging - 有没有一种干净的方法来记录 Groovy 中方法的结果?