这对于单词来说太奇怪了。我有2个完全独立的程序,它们都使用Serilog,例如:
Log.Logger = new LoggerConfiguration ()
.MinimumLevel.Debug ()
.Filter.ByExcluding (e => e.MessageTemplate.Text.Contains ("Could not find file"))
.WriteTo.File ("testA-.log", rollingInterval: RollingInterval.Day, retainedFileCountLimit: 1, outputTemplate: template)
.CreateLogger ();
第二个程序记录到“ testB-.log”。现在,奇怪的是,当程序B登录到“ testB-.log”时,它结束于“ testA-.log”中(Sic!)。没事 这就像Windows所说的“ Ony 1程序可以同时使用此dll”。大声笑。这里发生了什么奇怪的合并?
注意:这些程序通过SHVDN运行:https : //github.com/crosire/scripthookvdotnet/releases
似乎您用ScriptHookVDotNET执行的两个应用程序/脚本共享了存储记录器实例(Log.Logger
)的相同静态上下文,因此运行的最后一个脚本会更改实例并影响第一个脚本。
ScriptHookVDotNET似乎没有提供您在常规.NET应用程序中所期望的隔离,因此,我建议在其Gitter聊天中询问这是否是设计使然,以及创建隔离的静态上下文的推荐“ ScriptHookVDotNET方式”是什么。
一种可能的解决方法是将记录器实例存储为属于特定脚本的实例变量,该变量可以与脚本的实例方法共享。例如
public class Main : Script
{
private ILogger _log = Logger.None;
public Main()
{
_log = new LoggerConfiguration()
.MinimumLevel.Debug()
.Filter.ByExcluding(e => e.MessageTemplate.Text.Contains("Could not find file"))
.WriteTo.File("testA-.log", rollingInterval: RollingInterval.Day, retainedFileCountLimit: 1)
.CreateLogger();
KeyDown += OnKeyDown;
Interval = 1000;
}
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.T)
{
_log.Information("Create AI Script and store as AIone");
// ...
}
// ...
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句