Ideolog(PyCharm):如何为标准日志记录库配置日志格式

时间:2019-06-23 12:41:17

标签: logging pycharm

我正在使用标准的Python日志记录库(import logging)并安装Ideolog插件。但是它不支持标准日志库的格式(PyCharm要求对其进行配置)。我试过一些正则表达式,但不合适。我应该如何配置?

Screen of log format and Ideolog error

Default Ideolog settings

PS在代码中,我使用logging.info('Some info')之类的日志记录

5 个答案:

答案 0 :(得分:1)

如果您不想在正则表达式上花太多时间,可以做一个简单的

(INFO)

将匹配“ INFO” 您可以将其他级别的内容做为快速可视化。

答案 1 :(得分:0)

我只是遇到了同样的问题。

我使用了以下配置:

我的日志记录格式如下:

"%(asctime)s %(name)-30s %(levelname)-8s %(message)s"

日志解析模式:

pattern="^(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s(\S*)\s*(\w*)\s*(.*)$" timePattern="yyyy-MM-dd HH:mm:ss,SSS" linePattern="^\d" timeId="0" severityId="2" fullmatch="true"

记录突出模式:

pattern="^\s*ERROR?\s*$" action="HIGHLIGHT_LINE" fg="-65536" stripe="true"
pattern="^\s*WARNING?\s*$" action="HIGHLIGHT_LINE" fg="-22016" bold="true"
pattern="^\s*INFO\s*$" action="HIGHLIGHT_LINE" fg="-12599489"
pattern="^\s*DEBUG\s*$" action="HIGHLIGHT_LINE" fg="-14927361" stripe="true"
pattern="^\s*CRITICAL\s*$" action="HIGHLIGHT_LINE" fg="-65536" bold="true" italic="true" stripe="true"

HTH和YMMV ...

答案 2 :(得分:0)

这是main.py

import logging as log
logger = r'logger.log'


if __name__ == "__main__":
log.basicConfig(filename=logger,
                format='%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s',
                datefmt='%Y-%m-%d %H:%M:%S', level=log.DEBUG)

这是为了突出显示(思想)

message pattern:   ^(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s(\S*)\s*(\w*)\s*(.*)$

message start pattern:    ^\d

time format         HH:mm:ss,SSS
time capture group:       0
severity capt group:      3
cat capt group:           1

我做到了,所有工作。祝你好运

答案 3 :(得分:0)

基于基里尔的回答,我终于也将其用于pycharm中。如果有帮助,这是我的设置。

我的日志文件格式化程序是

spaces.messages.create

我的一个日志文件的典型行如下所示

fmtter = logging.Formatter(fmt="%(asctime)s-%(levelname)s-%(message)s")

我的消息模式是

2020-11-09 14:26:08,567-INFO-measuring Op/frame for CNN
2020-11-09 14:26:09,045-INFO-Op/frame: 249.64M

请注意,整个日期/时间字符串,“-”,级别字符串,另一个“-”和其余行的显式匹配是有效负载。 \ S与级别名称匹配,没有空格。 https://www.boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html的boost regexp页面非常有用,我使用了sublime来测试表达式。

^(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})-(\S*)-(.*)$

答案 4 :(得分:0)

在一个非常短的测试文件上遇到问题 - 只有四个条目 - 并且一直在寻找为什么我的正确模式没有被应用。

正如官方文档所述 https://github.com/JetBrains/ideolog/wiki/Custom-Log-Formats

选择正确的模式

"为了检测日志文件的格式,所有现有模式都与文件的前 25 行进行匹配。如果匹配数量大于 5,则选择匹配最多的模式。否则,每使用了 -line 解析器。”

因此,如果您的日志文件少于 5 个条目,算法会说它无法检测到正确的模式 - 并且不会应用任何模式,即使只有一个活动模式并且正则表达式 100% 正常工作。

群组

“此外,您必须为时间、严重性和类别指定捕获组索引。捕获组从 1 开始编号。如果您没有项目的捕获组,请指定 0。”

因此:组编号从 1 开始!

我的配置

str_logging_format = "%(asctime)s - %(name)-12s - %(levelname)-8s - %(message)s"

# -- Ideolog Config --
# :pattern:
# ^(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s-\s(\S*)\s*-\s(\w*)\s*-\s(.*)$
# :timePattern: yyyy-MM-dd HH:mm:ss,SSS
# :linePattern: ^\d
# :time Group : 1
# :severity Group : 3
# :Category Group: 2
#
# :highlighting:
# pattern="^\s*CRITICAL\s*$" action="HIGHLIGHT_LINE" fg="FF0000" bold="true" stripe="true"
# pattern="^\s*ERROR\s*$" action="HIGHLIGHT_LINE" fg="FF5F62" stripe="true"
# pattern="^\s*WARNING\s*$" action="HIGHLIGHT_LINE" fg="C73EC8" bold="true"
# pattern="^\s*INFO\s*$" action="HIGHLIGHT_LINE" fg="08C8EA"
# pattern="^\s*DEBUG\s*$" action="HIGHLIGHT_LINE" fg="3940C8"

PS:https://regex101.com/ 非常适合测试您的模式。