是否可以在程序的GUI中顯示Serilog日誌?我正在對我現有的應用程序進行一些更新。我的程序的一個功能是自動滾動更新時的日誌視圖。是否可以在程序的GUI中顯示Serilog日誌?
我正在用Serilog替換我自己編寫的所有現有日誌代碼。我想知道是否可以在文本框或列表視圖或其他GUI控件中顯示日誌。如果是這樣如何?
目前我正在使用滾動文件接收器。除此之外,我想這樣做。
是否可以在程序的GUI中顯示Serilog日誌?我正在對我現有的應用程序進行一些更新。我的程序的一個功能是自動滾動更新時的日誌視圖。是否可以在程序的GUI中顯示Serilog日誌?
我正在用Serilog替換我自己編寫的所有現有日誌代碼。我想知道是否可以在文本框或列表視圖或其他GUI控件中顯示日誌。如果是這樣如何?
目前我正在使用滾動文件接收器。除此之外,我想這樣做。
Serilog爲此提供了ILogEventSink
擴展點。您可以使用它將日誌事件添加到列表中,或者將它們呈現到某個地方的TextWriter
。
根據您的需求,可能會有不同程度的複雜程度。這一個(基於ConsoleSink
)應該讓你去:
class InMemorySink : ILogEventSink
{
readonly ITextFormatter _textFormatter = new MessageTemplateTextFormatter("{Timestamp} [{Level}] {Message}{Exception}");
public ConcurrentQueue<string> Events { get; } = new ConcurrentQueue<string>();
public void Emit(LogEvent logEvent)
{
if (logEvent == null) throw new ArgumentNullException(nameof(logEvent));
var renderSpace = new StringWriter();
_textFormatter.Format(logEvent, renderSpace);
Events.Enqueue(renderSpace.ToString());
}
}
然後鉤住它意味着創建一個實例:
var sink = new InMemorySink();
Log.Logger = new LoggerConfiguration()
.WriteTo.Sink(sink)
.CreateLogger();
然後,它給你的應用程序,以找出如何sink.Events
裝入它顯示時的文本框。
添加一些代碼來限制Emit()
中隊列的大小是個不錯的主意。
在這個例子中傳遞給IFormatProvider的東西是什麼?我從閱讀源代碼中看到它是用於本地化的。傳遞CultureInfo.InvariantCulture應該工作。 – Matt
我認爲你可以......你看過他們的'API docmentation'這是你自己可以肯定'Google'的東西你不覺得..? – MethodMan
我一直在谷歌搜索了一個多小時... – TheColonel26
你怎麼寫日誌,你正在執行什麼關鍵詞搜索..也許你應該使用EventLog,因爲你可以寫一些東西,輕鬆地從日誌中讀取..或者將日誌條目作爲xml存儲在數據庫中.. https://logentries.com/doc/video-tutorials/ – MethodMan