我们有一个分布式微服务应用程序,使用log4net和生产中的自定义appender。 问题是,在任何外部系统或服务中断期间,或者甚至在我们的令牌提供程序服务中的小打嗝期间,对于尝试访问该服务的每个用户,我们会获得一个或多个重复日志,将所有用户的数据相乘,我们得到在15分钟内超过20000个重复日志超出我们的配额。
如果可能的话,我们希望停止向我们的日志发送垃圾邮件而不添加对c#微服务的捕获。
我尝试过滤特定的日志,但log4net的过滤只能正常工作,如下:
我想过滤日志中带有“Token”字样的日志:
<filter type="log4net.Filter.StringMatchFilter">
<acceptOnMatch value="false" />
<stringToMatch value="Token" />
</filter>
但是......仍然记录带有“令牌”的错误消息:(
特别是,使用以下过滤器:
<filter type="log4net.Filter.StringMatchFilter">
<acceptOnMatch value="**true**" />
<stringToMatch value="Token" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
仅记录包含字符串“Token”的消息(好的,这是我希望的行为)
使用以下过滤器:
<filter type="log4net.Filter.StringMatchFilter">
<acceptOnMatch value="false" />
<stringToMatch value="Token" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
日志中没有记录任何消息(好的,这是我希望的行为)
AcceptOnMatch的Apaches文档中的条目:
“AcceptOnMatch属性是一个标志,用于确定找到匹配级别时的行为。如果该标志设置为true,则过滤器将接受日志记录事件,否则将中性该事件。“
那怎么会被拒绝?这种行为甚至可能吗?有任何想法吗?
对于这篇文章的篇幅很抱歉,我最欢迎任何解决原始问题的方法,无论是针对此过滤问题还是避免垃圾邮件日志的替代方案。
非常感谢您的阅读!