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

19
我正在使用标准的Python日志记录库(import logging),并安装了Ideolog插件。但它不支持标准日志记录库的格式(PyCharm要求配置)。我尝试过一些正则表达式,但它们不适合。我该如何配置它?
PS:在代码中,我像这样使用logging:logging.info('Some info')
屏幕上的日志格式和Ideolog错误的截图如下所示:

日志格式和Ideolog错误的截图

默认的Ideolog设置如下所示:

默认Ideolog设置

5个回答

9

我刚刚遇到了同样的问题。

我使用了以下配置:

我的日志格式如下:

"%(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 and YMMV...


7

如果你不想花太多精力来处理正则表达式,你可以使用一个简单的表达式

(INFO)

将匹配“INFO”,您可以对其他级别进行操作,以快速可视化。


5

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

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

选择正确的模式

"为了检测日志文件的格式,所有现有的模式都将与文件的前25行进行匹配。如果匹配量超过5个,则选择匹配最多的模式。否则,使用一个愚蠢的逐行解析器。"

因此,如果您的日志文件少于5个条目,该算法会认为无法检测到正确的模式 - 即使只有一个活动模式且正则表达式完全正确,也不会应用任何模式。

分组

"此外,您必须指定时间、严重性和类别的捕获组索引。捕获组从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"

提示:使用https://regex101.com/工具可以很好地测试您的模式匹配。


1

这是针对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)

and this is for highlighting (idealog)

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

我这样做,一切都正常。祝你好运


0

根据Kirill的答案,我最终在pycharm中也让它工作了。如果有帮助的话,这是我的设置。

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

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

我的消息模式是

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

请注意,要显式匹配整个日期/时间字符串,然后是“-”,然后是级别字符串,再是“-”,最后是行的其余部分作为有效载荷。\S 匹配没有空格的级别名称。https://www.boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html 上的 Boost 正则表达式页面很有帮助,我使用 sublime 测试了这个表达式。
Time format is yyyy-MM-dd HH:mm:ss,SSS
Time is group 0
Severity group 1
Category group 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接