我的代码库中有一些具有多行f-字符串的日志,例如:
...
logger.error(
f'...'
f'...'
f'...'
f'...'
f'...'
f'...'
)有些只在单独的行上有两个f'...',而另一些只有3个f'...',依此类推。
我目前正在复制模式以捕获这样的日志。例如:
...
patterns:
- pattern-either:
- pattern: |
logger.$METHOD(
f'...'
f'...'
f'...'
)
- pattern: |
logger.$METHOD(
f'...'
f'...'
f'...'
f'...'
f'...'
)在多行上捕获3和5f'...'的那些。我必须为那些有4,2等等的人写另一个模式。
是否有一种可伸缩的方法来以较少的模式捕获所有这些?当前的实现不会扩展,因为可能有6、7、8、9等多行f字符串的日志。
发布于 2022-10-21 14:31:50
基本上,创建了$X来表示消息,而不是重复行(元数据)。如果消息与'...'不匹配,则将其标记为可疑信息。完整的代码是:
rules:
- id: test
patterns:
- pattern-either:
- pattern: logger.$METHOD(..., $X, ...)
- pattern: logger.$METHOD(..., message=$X, ...)
- pattern: logger.$METHOD(..., msg=$X, ...)
- metavariable-pattern:
metavariable: $X
patterns:
- pattern-not: |
"..."
message: Semgrep found a match $X
languages:
- python
severity: WARNING所有学分都是lagoAbal的。
https://stackoverflow.com/questions/74086007
复制相似问题