.net 在Serilog中是否有一种方法可以过滤以某个关键字开头的消息?

6yoyoihd  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(154)

我有一个项目与以下Serilog配置,它在使用过滤器来排除日志的SourceContext以“Microsoft "开始工作得非常好。

"Serilog": {
    "WriteTo": [           
        {
            "Name": "File",
            "Args": {                    
                "path": "C:\\FE\\Logs\\Gateway\\LOG-.txt",
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fffffff}  | {Level:u3} {Message}"                   
            }
        }
    ],
    "Filter": [
        {
            "Name": "ByExcluding",
            "Args": {
                "expression": "StartsWith(SourceContext, 'Microsoft.')"
            }
        }
    ],
    "Enrich": [
        "FromLogContext",
        "WithMachineName"            
    ]
}

我正在寻找的东西,将过滤日志的某些关键字上的消息。所以,而不是使用SourceContext,我需要过滤日志的实际消息开始于关键字“审计:“。
我尝试使用类似以下内容进行过滤,但没有成功。

"Filter": [
        {
            "Name": "ByIncludingOnly",
            "Args": {
                "expression": "StartsWith(Message, 'AUDIT:')"
            }
        }
    ]

你知道我们能不能做到吗?

tjrkku2a

tjrkku2a1#

在新的serilog库中,@Message是@m

"Filter": [
    {
        "Name": "ByIncludingOnly",
        "Args": {
            "expression": "StartsWith(@m, 'AUDIT:')"
        }
    }
]

同样地,

Timestamp: @t
Level: @l
MessageTemplate: @mt
Exception: @x
Properties: @p

希望,这有帮助!

p3rjfoxz

p3rjfoxz2#

我发现了问题所在。在通过Message进行过滤的情况下,我们需要将@放在Message前面,而不是SourceContext。因此,下面的过滤器工作正常:

"Filter": [
            {
              "Name": "ByExcluding",
              "Args": {
                "expression": "StartsWith(@Message, 'AUDIT::')"
              }
            }
          ]

相关问题