我们遇到以下情况:由于.NET的AppDomain隔离,我们遇到了Serilog的问题:
|App| --> |3rd| --> |Class| --> Log.Debug("...") --> [NOK]
`-------------> |Class| --> Log.Debug("...") --> [OK]
(1) (2) (3) (4) (5)
我们在应用的Logger
方法中创建了一个全局Main()
对象,并将其分配给Log.Logger
。
我们调用内部创建新AppDomain 的第三方工具。 (我们无法控制此情况,也无法改变此行为。)
我们的应用和第三方工具都会创建Class
的实例对象。
Class
使用Serilog的静态Log
类执行记录代码。
Log.Logger
在从我们的应用创建的Logger
对象访问时引用正确配置的Class
,但在{中设置为默认SilentLogger
{1}}通过第三方工具创建的对象。
我想这是预期的行为,因为两个Class
对象属于两个不同的AppDomain,静态变量被隔离到它们自己的AppDomain。
有什么方法可以解决这个问题吗?我们能以某种方式利用Serilog方便的静态Class
类吗?除了解决这类问题的Log
课程之外,Serilog框架中是否还有其他内容,我们可能错过了?我在#380中发现了一个类似的问题,但没有最终的解决方案,就我所见。
我们考虑在新的AppDomain中创建一个新的Log
对象。但是,这意味着我们在1-2和1-3之间推送到Logger
的属性不包含在新Logger
的日志事件中。