c# - 我需要自己清理 NLog MDLC 吗?
问题描述
我在 REST 服务器中使用 NLog 4.5.10 和 C# 4.7.1。我正在使用该方法MappedDiagnosticsLogicalContext.Set(item, value)
将请求的一些参数添加到我的日志消息中。
现在的问题是:我必须手动清理它们还是这些字典也被垃圾收集了?
据我所知,字典绑定到当前线程(通过使用 ThreadId?)。当我有很多请求并且 ThreadId 再次开始计数为零时会发生什么?可能会发生,当相应的线程被销毁时,具有相同 ID 的最后一个线程的值仍然存在,或者这些对象是否被销毁?
最好的问候,丹尼尔
解决方案
当线程对象被垃圾收集时,异步上下文将被“销毁”。但是如果线程存在于线程池中,那么它可能会“永远”存在。
也许您可以使用 SetScoped:
using (MappedDiagnosticsLogicalContext.SetScoped("Property", "PropertyValue")) {
// "Property" item is present in current context
}
另请参阅https://github.com/NLog/NLog/wiki/MDLC-Layout-Renderer#scoped-item
推荐阅读
- javascript - 在 mongoDB 中创建 firebase 样式的权限层次结构
- html - 图像(字面意思)远离 div
- javascript - 保护对象属性不被控制台覆盖
- postgresql - SequelizeJS:使用数字作为字符串时列值的顺序错误
- swift - Firebase 数据加载速度比 UITableView 慢
- python - 如何检查消息是否在正确的频道中发送
- unix - Vim 在服务器中的行为不正常
- ruby-on-rails - Ruby 2.5.1、Rails 5.1.6、HTTParty 帖子返回 OpenSSL 错误
- javascript - 如何在页面的多个位置使用相同的组件实例 - Vue2
- jquery - 动画 CSS 更改 (jQuery)