Ejemplo n.º 1
0
        public void Select(LoggerFilterOptions options, Type providerType, string category, out LogType logType,
                           out LogLevel?minLevel, out Func <string, string, LogLevel, bool> filter)
        {
            filter   = null;
            minLevel = options.MinLevel;
            logType  = options.MiniType;
            // Filter rule selection:
            // 1. Select rules for current logger type, if there is none, select ones without logger type specified
            // 2. Select rules with longest matching categories
            // 3. If there nothing matched by category take all rules without category
            // 3. If there is only one rule use it's level and filter
            // 4. If there are multiple rules use last
            // 5. If there are no applicable rules use global minimal level

            var providerAlias        = LoggerProviderAliasUtilities.GetAlias(providerType);
            LoggerFilterRule current = null;

            foreach (LoggerFilterRule rule in options.Rules)
            {
                if (IsBetter(rule, current, providerType.FullName, category) ||
                    (!string.IsNullOrEmpty(providerAlias) && IsBetter(rule, current, providerAlias, category)))
                {
                    current = rule;
                }
            }

            if (current != null)
            {
                filter   = current.Filter;
                minLevel = current.LogLevel;
                logType  = current.LogType;
            }
        }
        public void Select(LoggerFilterOptions options, Type providerType, string category, out LogType logType, out LogLevel?minLevel, out int traceCount, out Func <string, string, LogLevel, bool> filter)
        {
            filter     = null;
            minLevel   = new Microsoft.Extensions.Logging.LogLevel?(options.MinLevel);
            logType    = options.MiniType;
            traceCount = options.TraceCount;
            string           providerAlias = LoggerProviderAliasUtilities.GetAlias(providerType);
            LoggerFilterRule current       = null;

            foreach (LoggerFilterRule loggerFilterRule in options.Rules)
            {
                LoggerFilterRule rule = (LoggerFilterRule)loggerFilterRule;
                bool             flag = LoggerRuleSelector.IsBetter(rule, current, providerType.FullName, category) || (!string.IsNullOrEmpty(providerAlias) && LoggerRuleSelector.IsBetter(rule, current, providerAlias, category));
                if (flag)
                {
                    current = rule;
                }
            }
            bool flag2 = current != null;

            if (flag2)
            {
                filter     = current.Filter;
                minLevel   = current.LogLevel;
                logType    = current.LogType;
                traceCount = current.TraceCount;
            }
        }
Ejemplo n.º 3
0
        private void RefreshFilters(MSLOG.LoggerFilterOptions filterOptions, string value)
        {
            lock (_sync)
            {
                _filterOptions = new LoggerFilterOptions(filterOptions);

                foreach (var logger in _loggers)
                {
                    var loggerInformation = logger.Value.Loggers;
                    var categoryName      = logger.Key;

                    ApplyRules(loggerInformation, categoryName, 0, loggerInformation.Length);
                }
            }
        }
Ejemplo n.º 4
0
        private void RefreshFilters(LoggerFilterOptions filterOptions, string value)
        {
            object sync = LoggerFactory._sync;

            lock (sync)
            {
                LoggerFactory._filterOptions = new LoggerFilterOptions(filterOptions);
                foreach (KeyValuePair <string, Logger> logger in LoggerFactory._loggers)
                {
                    LoggerInformation[] loggerInformation = logger.Value.Loggers;
                    string categoryName = logger.Key;
                    this.ApplyRules(loggerInformation, categoryName, 0, loggerInformation.Length);
                }
            }
        }
Ejemplo n.º 5
0
 public LoggerFilterOptions(LoggerFilterOptions options)
 {
     base.MinLevel = LogLevel.Information;
     this.MiniType = LogType.None;
     foreach (LoggerFilterRule loggerFilterRule in options.Rules)
     {
         LoggerFilterRule rule = (LoggerFilterRule)loggerFilterRule;
         bool             flag = rule.CategoryName.Equals("Default");
         if (flag)
         {
             this.MiniType   = rule.LogType;
             base.MinLevel   = (rule.LogLevel ?? LogLevel.Information);
             this.TraceCount = rule.TraceCount;
         }
         base.Rules.Add(rule);
     }
 }
Ejemplo n.º 6
0
        public async Task Invoke(HttpContext context)
        {
            LoggerFilterOptions _filterOption = LoggerFactory._filterOptions;

            if (context.Request.Path.StartsWithSegments(SavePath))
            {
                //var _logLevel = json.ToModel<Newtonsoft.Json.Linq.JObject>();
                string logFilePath = null;
                if (JsonConfiguration != null)
                {
                    var fi = JsonConfiguration.Source.FileProvider.GetFileInfo(JsonConfiguration.Source.Path);
                    if (!fi.IsDirectory)
                    {
                        logFilePath = fi.PhysicalPath;
                    }
                    var fileInfo = new FileInfo(logFilePath);
                    if (!fileInfo.Directory.Exists)
                    {
                        fileInfo.Directory.Create();
                    }
                }
                if (string.IsNullOrEmpty(logFilePath))
                {
                    logFilePath = Path.Combine(LogDirectory, LogJsonFileName);
                }
                string json = string.Empty;
                using (StreamReader sr = new StreamReader(context.Request.Body))
                {
                    json = sr.ReadToEnd();
                }
                File.WriteAllText(logFilePath, json);
                context.Response.ContentType = "application/json";
                await context.Response.WriteAsync("{message:'ok',status:200}");
            }
            else
            {
                StringBuilder sb     = new StringBuilder();
                var           levels = Enum.GetNames(typeof(LogLevel));
                var           types  = Enum.GetNames(typeof(LogType));

                sb.AppendLine("<header><h1><a href=\"" + LogRequestPath +
                              "\">Logs</a></h1><br>Set Default : <select id='defaltLevel' onchange='setDefaultLevel(this)'><option>--Log Level--</option>");
                sb.Append(string.Join("", levels.Select(t => $"<option>{t}</option>")));
                sb.Append("</select> &nbsp;&nbsp; Default Type: <select id='defaltType' onchange='setDefaultType(this)'><option>--Log Type--</option>");
                sb.Append(string.Join("", types.Select(t => $"<option>{t}</option>")));
                sb.Append("</select> &nbsp;<button type='buttone' onclick='_save()'>Save</button></header>");
                sb.AppendLine("<table id='index'><thead><tr><th abbr='Name'>Name</th><th abbr='Level'>Level</th><th>Type</th><th abbr='Operation'>Operation</th></tr></thead>");
                SortedDictionary <string, LogLevel> levelValues = new SortedDictionary <string, LogLevel>();
                SortedDictionary <string, LogType>  typeValues  = new SortedDictionary <string, LogType>();
                foreach (LoggerFilterRule rule in _filterOption.Rules)
                {
                    levelValues[rule.CategoryName ?? "Default"] = rule.LogLevel ?? _filterOption.MinLevel;
                    typeValues[rule.CategoryName ?? "Default"]  = rule.LogType;
                }
                foreach (var log in LoggerFactory._loggers.OrderBy(t => t.Key))
                {
                    if (log.Value.Loggers.Length > 0)
                    {
                        levelValues[log.Key] = log.Value.Loggers[0].MinLevel ?? _filterOption.MinLevel;
                        typeValues[log.Key]  = log.Value.Loggers[0].LogType;
                    }
                }
                sb.AppendLine("<tbody>");
                foreach (var log in levelValues)
                {
                    sb.Append($"<tr><td>{log.Key}</td><td>{log.Value}</td><td>{typeValues[log.Key]}</td><td>");
                    sb.Append("<select name='_level'>");
                    foreach (var n in levels)
                    {
                        if (n == log.Value.ToString())
                        {
                            sb.Append($"<option selected>{n}</option>");
                        }
                        else
                        {
                            sb.Append($"<option>{n}</option>");
                        }
                    }
                    sb.Append("</select>&nbsp;&nbsp;");
                    sb.Append("<select name='_type'>");
                    var s = typeValues[log.Key];
                    foreach (var n in types)
                    {
                        if (n == s.ToString())
                        {
                            sb.Append($"<option selected>{n}</option>");
                        }
                        else
                        {
                            sb.Append($"<option>{n}</option>");
                        }
                    }
                    sb.Append("</select>");
                    sb.Append("</td></tr>");
                    sb.AppendLine();
                }
                sb.AppendLine("<tbody></table>");
                await context.Response.WriteAsync(html.Replace("{{url}}", SavePath).Replace("{{body}}", sb.ToString()));
            }
        }
Ejemplo n.º 7
0
        public async Task Invoke(HttpContext context)
        {
            LoggerFilterOptions _filterOption = LoggerFactory._filterOptions;
            bool flag = context.Request.Path.StartsWithSegments(this.SavePath);

            if (flag)
            {
                string logFilePath = null;
                bool   flag2       = LoggerSettings.JsonConfiguration != null;
                if (flag2)
                {
                    IFileInfo fi    = LoggerSettings.JsonConfiguration.Source.FileProvider.GetFileInfo(LoggerSettings.JsonConfiguration.Source.Path);
                    bool      flag3 = !fi.IsDirectory;
                    if (flag3)
                    {
                        logFilePath = fi.PhysicalPath;
                    }
                    FileInfo fileInfo = new FileInfo(logFilePath);
                    bool     flag4    = !fileInfo.Directory.Exists;
                    if (flag4)
                    {
                        fileInfo.Directory.Create();
                    }
                    fi       = null;
                    fileInfo = null;
                }
                bool flag5 = string.IsNullOrEmpty(logFilePath);
                if (flag5)
                {
                    logFilePath = Path.Combine(LoggerSettings.LogDirectory, "_logging.json");
                }
                string json = string.Empty;
                using (StreamReader _sr = new StreamReader(context.Request.Body))
                {
                    json = _sr.ReadToEnd();
                }
                File.WriteAllText(logFilePath, json);
                context.Response.ContentType = "application/json";
                await context.Response.WriteAsync("{message:'ok',status:200}", default(CancellationToken));

                logFilePath = null;
                json        = null;
            }
            else
            {
                StringBuilder sb     = new StringBuilder();
                string[]      levels = Enum.GetNames(typeof(LogLevel));
                string[]      types  = Enum.GetNames(typeof(LogType));
                sb.AppendLine("<header><h1><a href=\"" + LoggerSettings.LogRequestPath + "\">Logs</a></h1><br>Set Default : <select id='defaltLevel' onchange='_setDefault(this,\"_level\")'><option>--Log Level--</option>");
                sb.Append(string.Join("", from t in levels
                                      select "<option>" + t + "</option>"));
                sb.Append("</select> &nbsp;&nbsp; Default Type: <select id='defaltType' onchange='_setDefault(this,\"_type\")'><option>--Log Type--</option>");
                sb.Append(string.Join("", from t in types
                                      select "<option>" + t + "</option>"));
                sb.Append("</select>");
                sb.Append(" &nbsp;&nbsp; TraceCount: <input type=text id='traceCount' value='' onchange='_setDefault(this,\"_count\")'/>");
                sb.Append(" &nbsp;<button type='button' onclick='_save()'>Save</button></header>");
                SortedDictionary <string, LoggerFilterRule> rules       = new SortedDictionary <string, LoggerFilterRule>();
                SortedDictionary <string, LogLevel>         levelValues = new SortedDictionary <string, LogLevel>();
                SortedDictionary <string, LogType>          typeValues  = new SortedDictionary <string, LogType>();
                foreach (LoggerFilterRule loggerFilterRule in _filterOption.Rules)
                {
                    LoggerFilterRule rule = (LoggerFilterRule)loggerFilterRule;
                    rules[rule.CategoryName ?? "Default"] = rule;
                    rule = null;
                }
                foreach (KeyValuePair <string, Logger> log in from t in LoggerFactory._loggers
                         orderby t.Key
                         select t)
                {
                    if (log.Value.Loggers.Length != 0)
                    {
                        rules[log.Key] = log.Value.Loggers[0].Rule;
                    }
                }
                sb.AppendLine();
                var objs = from k in rules
                           select k.Value into t
                           select new
                {
                    Name       = t.CategoryName,
                    LogType    = t.LogType.ToString(),
                    LogLevel   = t.LogLevel.ToString(),
                    TraceCount = t.TraceCount
                };
                sb.AppendLine("<script>var rules=" + objs.ToJson() + ";</script>");
                await context.Response.WriteAsync(LoggerSettings.html.Replace("{{url}}", this.SavePath).Replace("{{body}}", sb.ToString()), default(CancellationToken));

                sb     = null;
                levels = null;
                types  = null;
                rules  = null;
                objs   = null;
            }
        }
Ejemplo n.º 8
0
        public async Task Invoke(HttpContext context)
        {
            LoggerFilterOptions _filterOption = LoggerFactory._filterOptions;

            if (context.Request.Path.StartsWithSegments(SavePath))
            {
                //var _logLevel = json.ToModel<Newtonsoft.Json.Linq.JObject>();
                string logFilePath = null;
                if (JsonConfiguration != null)
                {
                    var fi = JsonConfiguration.Source.FileProvider.GetFileInfo(JsonConfiguration.Source.Path);
                    if (!fi.IsDirectory)
                    {
                        logFilePath = fi.PhysicalPath;
                    }
                    var fileInfo = new FileInfo(logFilePath);
                    if (!fileInfo.Directory.Exists)
                    {
                        fileInfo.Directory.Create();
                    }
                }
                if (string.IsNullOrEmpty(logFilePath))
                {
                    logFilePath = Path.Combine(LogDirectory, LogJsonFileName);
                }
                string json = string.Empty;
                using (StreamReader sr = new StreamReader(context.Request.Body))
                {
                    json = sr.ReadToEnd();
                }
                File.WriteAllText(logFilePath, json);
                context.Response.ContentType = "application/json";
                context.Response.StatusCode  = 200;
                await context.Response.WriteAsync("{message:'ok',status:200}");
            }
            else
            {
                StringBuilder sb      = new StringBuilder();
                var           levels  = Enum.GetNames(typeof(LogLevel));
                var           types   = Enum.GetNames(typeof(LogScope));
                var           formats = Enum.GetNames(typeof(LogType));
                sb.AppendLine("<header><h1><a href=\"" + LogRequestPath +
                              "\">Logs</a></h1><br>Default Level: <select id='defaultLevel' onchange='_setDefault(this,\"_level\")'><option>--Log Level--</option>");
                sb.Append(string.Join("", levels.Select(t => $"<option>{t}</option>")));
                sb.Append("</select> &nbsp;&nbsp; Default Scope: <select id='defaultScope' onchange='_setDefault(this,\"_scope\")'><option>--Log Scope--</option>");
                sb.Append(string.Join("", types.Select(t => $"<option>{t}</option>")));
                sb.Append("</select> &nbsp;&nbsp; Default Type: <select id='defaultType' onchange='_setDefault(this,\"_type\")'><option>--Log Type--</option>");
                sb.Append(string.Join("", formats.Select(t => $"<option>{t}</option>")));
                sb.Append("</select>");

                sb.Append($" &nbsp;&nbsp; TraceCount: <input type=text id='traceCount' value='' onchange='_setDefault(this,\"_count\")'/>");
                sb.Append(" &nbsp;<button type='button' onclick='_save()'>Save</button></header>");

                SortedDictionary <string, LoggerFilterRule> rules = new SortedDictionary <string, LoggerFilterRule>();
                //sb.AppendLine("<table id='index'><thead><tr><th abbr='Name'>Name</th><th abbr='Level'>Level</th><th>Type</th><th abbr='Operation'>Operation</th></tr></thead>");
                SortedDictionary <string, LogLevel> levelValues = new SortedDictionary <string, LogLevel>();
                SortedDictionary <string, LogScope> typeValues  = new SortedDictionary <string, LogScope>();
                foreach (LoggerFilterRule rule in _filterOption.Rules)
                {
                    rules[rule.CategoryName ?? "Default"] = rule;
                    //levelValues[rule.CategoryName ?? "Default"] = rule.LogLevel ?? _filterOption.MinLevel;
                    //typeValues[rule.CategoryName ?? "Default"] = rule.LogType;
                }
                foreach (var log in LoggerFactory._loggers.OrderBy(t => t.Key))
                {
                    if (log.Value.Loggers.Length > 0)
                    {
                        rules[log.Key] = log.Value.Loggers[0].Rule;
                        //levelValues[log.Key] = log.Value.Loggers[0].Rule.LogLevel ?? _filterOption.MinLevel;
                        //typeValues[log.Key] = log.Value.Loggers[0].Rule.LogType;
                    }
                }
                sb.AppendLine();
                var objs = rules.Select(k => k.Value)
                           .Select(t => new
                {
                    Name     = t.CategoryName,
                    LogScope = t.LogScope.ToString(),
                    LogLevel = t.LogLevel.ToString(),
                    LogType  = t.LogType.ToString(),
                    t.TraceCount,
                });
                sb.AppendLine($"<script>var rules={objs.ToJson()};</script>");

                /*sb.AppendLine("<tbody>");
                 * foreach (var log in levelValues)
                 * {
                 *
                 *  sb.Append($"<tr><td>{log.Key}</td><td>{log.Value}</td><td>{typeValues[log.Key]}</td><td>");
                 *  sb.Append("<select name='_level'>");
                 *  foreach (var n in levels)
                 *  {
                 *      if (n == log.Value.ToString())
                 *      {
                 *          sb.Append($"<option selected>{n}</option>");
                 *      }
                 *      else
                 *      {
                 *          sb.Append($"<option>{n}</option>");
                 *      }
                 *  }
                 *  sb.Append("</select>&nbsp;&nbsp;");
                 *  sb.Append("<select name='_type'>");
                 *  var s = typeValues[log.Key];
                 *  foreach (var n in types)
                 *  {
                 *      if (n == s.ToString())
                 *      {
                 *          sb.Append($"<option selected>{n}</option>");
                 *      }
                 *      else
                 *      {
                 *          sb.Append($"<option>{n}</option>");
                 *      }
                 *  }
                 *  sb.Append("</select>");
                 *  var rule = _filterOption.Rules.FirstOrDefault(x => x.CategoryName.Equals(log.Key, StringComparison.OrdinalIgnoreCase));
                 *  var traceCount = TraceCount;
                 *  if (rule is LoggerFilterRule _rule)
                 *  {
                 *      traceCount = _rule.TraceCount;
                 *  }
                 *  sb.AppendFormat("&nbsp;<input value='{0}' name='traceCount'/></td></tr>",traceCount);
                 *  sb.AppendLine();
                 * }
                 * sb.AppendLine("<tbody></table>");
                 */
                context.Response.StatusCode = 200;
                await context.Response.WriteAsync(html.Replace("{{url}}", SavePath).Replace("{{body}}", sb.ToString()));
            }
        }