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; } }
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); } } }
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); } } }
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); } }
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> 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> <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> "); 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())); } }
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> 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(" TraceCount: <input type=text id='traceCount' value='' onchange='_setDefault(this,\"_count\")'/>"); sb.Append(" <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; } }
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> 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> 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($" TraceCount: <input type=text id='traceCount' value='' onchange='_setDefault(this,\"_count\")'/>"); sb.Append(" <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> "); * 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(" <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())); } }