我想构建一个将所有消息发送到中央tcp服务器的appender . 但是,我想使用的消息传递框架使用log4net Logger 实例本身来支持调试/跟踪 . 因此,激活调试日志协议化所有即将发送的消息似乎是有问题的,因为此调试消息本身将创建另一个相同类型的消息 .
是否有log4net保护以防止此网站的名称情况?
根据我的理解:您在自定义appender中使用了一个类或框架,它本身使用log4net来编写日志,并且您希望在通过appender传输这些日志时避免循环 .
我可以想到两种可以帮助你避免这种情况的方法:
使用 LogLog 机制
LogLog
过滤来自框架的消息
只有您可以访问框架代码:
您可以通过配置更改将使用log4net常规 Logger 或 LogLog logger获得的代码 .
通过 LogLog 记录就像这样:
log4net.Util.LogLog.Error(this.GetType(), "your error here");
使用this link可以阅读有关LogLog的更多信息 .使用this link可以阅读运行时如何启用LogLog .
如果您的框架具有唯一的 Logger 名称,则可以配置它的日志不会通过您的自定义appender传输 .
通过完全关闭它:
<logger name="Framework.logger.name"> <level value="OFF" /> </logger>
或者通过自定义appender仅传输特定 Logger
<logger name="specific.logger.name"> <level value="ALL" /> <appender-ref ref="MyCustomAppender" /> </logger>
你可以阅读更多here .
您是否自己编写了消息传递框架?如果确实存在跟踪按摩,框架会不断添加跟踪消息,即使您没有自己使用log4net也不会非常有用 . 我想框架不会添加触发它自己的跟踪消息 . 您知道的唯一方法是测试框架并查看它是否正常工作 . 或者发布创建循环的代码 .
2 回答
根据我的理解:您在自定义appender中使用了一个类或框架,它本身使用log4net来编写日志,并且您希望在通过appender传输这些日志时避免循环 .
我可以想到两种可以帮助你避免这种情况的方法:
使用
LogLog
机制过滤来自框架的消息
使用LogLog
只有您可以访问框架代码:
您可以通过配置更改将使用log4net常规 Logger 或
LogLog
logger获得的代码 .通过
LogLog
记录就像这样:使用this link可以阅读有关LogLog的更多信息 .
使用this link可以阅读运行时如何启用LogLog .
过滤消息
如果您的框架具有唯一的 Logger 名称,则可以配置它的日志不会通过您的自定义appender传输 .
通过完全关闭它:
或者通过自定义appender仅传输特定 Logger
你可以阅读更多here .
您是否自己编写了消息传递框架?如果确实存在跟踪按摩,框架会不断添加跟踪消息,即使您没有自己使用log4net也不会非常有用 . 我想框架不会添加触发它自己的跟踪消息 . 您知道的唯一方法是测试框架并查看它是否正常工作 . 或者发布创建循环的代码 .