public LoggerViewModel(IConfigManager config) { _selectedLogLevel = config.Get("enslaver", "debug", "Trace"); var memoryTarget = LogManager.Configuration.AllTargets.FirstOrDefault(t => t.Name == "m1") as ObservableTarget; if (memoryTarget == null) { memoryTarget = new ObservableTarget { Layout = new SimpleLayout("${longdate}|${level:uppercase=true}|${logger}|${message}") }; LogManager.Configuration.AddTarget("m1", memoryTarget); var rule = new LoggingRule("*", LogLevel.Trace, memoryTarget); LogManager.Configuration.LoggingRules.Add(rule); LogManager.ReconfigExistingLoggers(); } internalLogEvents = new ObservableCollection <LogEventInfo>(); LogEvents = new ObservableCollection <LogEventInfo>(); this.ObservableForProperty(_ => _.SelectedLogLevel) .Select(_ => _.Value) .DistinctUntilChanged() .ObserveOnUI() .Subscribe(_ => FilterLogs()); memoryTarget.WhenLogWrite .ObserveOnUI() .SubscribeOn(ThreadPoolScheduler.Instance) .Subscribe(l => { if (internalLogEvents.Count > 2000) { internalLogEvents.Clear(); } internalLogEvents.Add(l); if (l.Level.Ordinal >= LogLevel.FromString(SelectedLogLevel).Ordinal) { if (LogEvents.Count > 2000) { LogEvents.Clear(); } LogEvents.Add(l); } }); config.WhenConfigChanges .Throttle(TimeSpan.FromMilliseconds(200), ThreadPoolScheduler.Instance) .Where(p => p.Keys.Contains("enslaver_debug")) .DistinctUntilChanged() .ObserveOnUI() .Subscribe(p => { SelectedLogLevel = config.Get("enslaver", "debug", SelectedLogLevel); }); LogLevels = new List <string>(new[] { "Trace", "Debug", "Info", "Warn", "Error", "Fatal", "Off" }); FilterLogs(); }
///// <summary> ///// Destructor - added to try and fix an issue when using the logger in mono ///// </summary> //~ NLogFactory() //{ // LogManager.Configuration = null; //} private static LoggingConfiguration GetDefaultLoggingConfiguration() { var config = new LoggingConfiguration(); var observableTarget = new ObservableTarget(); config.AddTarget("observable", observableTarget); observableTarget.Layout = "${date:format=HH\\:mm\\:ss} | ${message}"; LoggingRule rule1 = new LoggingRule("*", LogLevel.Info, observableTarget); config.LoggingRules.Add(rule1); return(config); }