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");

     }

 }

 

posted @ 2024-05-22 11:02  -Timosthetic  阅读(150)  评论(0编辑  收藏  举报