我在Azure實例(Windows Server 2012 R2 Datacenter)上運行Seq,並從運行在本地工作站上的控制檯應用程序中記錄Serilog。我有3個接收器配置 - 文件,控制檯和Seq。我也在dnxcore50上運行(以防萬一你以爲我的設置不夠狡猾)。我所有的事件都在控制檯和文件100%的時間顯示出來。 Seq只捕獲5次或更多次運行中的1次事件,即它將捕獲所有運行事件或全部事件。我正在使用免費的單一用戶許可證來評估Seq,並且我還沒有發現任何暗示會導致此行爲的任何限制。Serilog Seq接收器並不總是捕獲事件
我已經在記錄器上設置了SelfLog.Out,但是根本沒有記錄任何記錄,除了我添加的測試行以確保自我記錄可以至少寫入指定文件。
public abstract class SerilogBaseLogger<T> : SerilogTarget
{
protected SerilogBaseLogger(SerilogOptions options, string loggerType)
{
LoggerConfiguration = new LoggerConfiguration();
Options = options;
LevelSwitch.MinimumLevel = options.LogLevel.ToSerilogLevel();
var file = File.CreateText(Path.Combine(options.LogFilePath, string.Format("SelfLog - {0}.txt", loggerType)));
file.AutoFlush = true;
SelfLog.Out = file;
SelfLog.WriteLine("Testing self log.");
}
// ... snip ....
}
public class SerilogSeqTarget<T> : SerilogBaseLogger<T>
{
public string Server => Options.Seq.Server;
public SerilogSeqTarget(SerilogOptions options)
: base(options, string.Format("SerilogSeqTarget[{0}]", typeof(T)))
{
LoggerConfiguration
.WriteTo
.Seq(Server);
InitializeLogger();
}
public override string ToString()
{
return string.Format("SerilogSeqTarget<{0}>", typeof(T).Name);
}
}
public class SerilogLoggerFactory<TType> : LoggerFactory<SerilogTarget>
{
// .... snip ....
public override IMyLoggerInterface GetLogger()
{
var myLogger = new SerilogDefaultLogger()
.AddTarget(SerilogTargetFactory<TType>.GetFileTarget(Options))
.AddTarget(SerilogTargetFactory<TType>.GetConsoleTarget(Options))
.AddTarget(SerilogTargetFactory<TType>.GetSeqTarget(Options));
myLogger.Info("Logger initialized with {@options} and targets: {targets}", Options, ((SerilogDefaultLogger)myLogger).Targets);
return myLogger;
}
}
public class SerilogTargetFactory<TType>
{
// ... snip ...
public static SerilogTarget GetSeqTarget(SerilogOptions options)
{
return !string.IsNullOrEmpty(options.Seq.Server)
? new SerilogSeqTarget<TType>(options)
: null;
}
}
有什麼建議嗎?這只是一個副作用嗎?在預先發布一切(儘管在這種情況下我希望事情會一直失敗)。
這樣做。我讓我的'SerilogBaseLogger'實現'IDisposable',並且也用於我的目標(這些將用Serilog語言來說就是接收器),並且這似乎使事情更可靠。無論如何,這可能是一個好主意(我正在玩/轉換舊的日誌框架/包裝,並且很有可能無法正確清理它)。 –
太好了,很高興聽到它被整理出來。乾杯! –
所以,事實證明,我仍然看到了這個問題,但是通過設置緩衝區文件名,它至少會最終到達那裏。在這一點上,我傾向於責怪我的IDisposable模式或dnxcore50的RC統計。我將在最終版本發佈後重新訪問和更新,但如果其他人在此期間遇到此問題...... –