Serilog日志输出到WPF UI控件
使用到日志接收器的接口 ILogEventSink
WPF+Prsim+Serilog
详细介绍链接 https://github.com/serilog/serilog/wiki/Developing-a-sink
public class LogItem { public DateTime Timestamp { get; set; } public string Message { get; set; } public LogEventLevel Level { get; set; } public LogItem(LogEvent logEvent) { Timestamp = logEvent.Timestamp.DateTime; Message = logEvent.RenderMessage(); Level = logEvent.Level; } }
public class LogEventSink : ILogEventSink { private readonly ObservableCollection<LogItem> dataSource; public LogEventSink(ObservableCollection<LogItem> dataSource) { this.dataSource = dataSource; } public void Emit(LogEvent logEvent) { dataSource.Add(new LogItem(logEvent)); } }
public class MainWindowViewModel : BindableBase { private ObservableCollection<LogItem> _logItems; public ObservableCollection<LogItem> LogItems { get { return _logItems; } set { SetProperty(ref _logItems, value); } } public MainWindowViewModel() { LogItems=new ObservableCollection<LogItem>(); Log.Logger = new LoggerConfiguration() .WriteTo.Sink(new LogEventSink(LogItems)) .CreateLogger(); } private DelegateCommand writeLogCommand; public DelegateCommand WriteLogCommand => writeLogCommand ?? (writeLogCommand = new DelegateCommand(ExecuteCommandName)); void ExecuteCommandName() { Log.Information($"MainWindowViewModel created"); } }