Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        ///// <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);
        }