|
| 1 | +using System; |
| 2 | +using System.Collections.Generic; |
| 3 | +using System.IO; |
| 4 | +using System.Xml.Xsl; |
| 5 | +using Microsoft.Extensions.Logging; |
| 6 | + |
| 7 | +namespace Ultz.Logger |
| 8 | +{ |
| 9 | + public class UltzLogger : ILogger |
| 10 | + { |
| 11 | + public string Format { get; set; } = "[HH:MI:SS LVL]: EVENT_ID MSG"; |
| 12 | + public List<TextWriter> Writers { get; set; } = new List<TextWriter>(); |
| 13 | + public List<LogLevel> LogLevels { get; set; } = new List<LogLevel>(); |
| 14 | + |
| 15 | + public void Log<TState> |
| 16 | + ( |
| 17 | + LogLevel logLevel, |
| 18 | + EventId eventId, |
| 19 | + TState state, |
| 20 | + Exception exception, |
| 21 | + Func<TState, Exception, string> formatter |
| 22 | + ) |
| 23 | + { |
| 24 | + var msg = Format.Replace("DD", DateTime.Now.ToString("dd")) |
| 25 | + .Replace("MO", DateTime.Now.ToString("MM")) |
| 26 | + .Replace("YYYY", DateTime.Now.ToString("yyyy")) |
| 27 | + .Replace("YY", DateTime.Now.ToString("yy")) |
| 28 | + .Replace("HH", DateTime.Now.ToString("hh")) |
| 29 | + .Replace("MI", DateTime.Now.ToString("mm")) |
| 30 | + .Replace("SS", DateTime.Now.ToString("ss")) |
| 31 | + .Replace("EVENT_ID", $"[{eventId.Name}/{eventId.Id}]") |
| 32 | + .Replace("MSG", formatter(state, exception)); |
| 33 | + Writers.ForEach(x => x.Write(msg)); |
| 34 | + } |
| 35 | + |
| 36 | + private string GetLevel(LogLevel lvl) |
| 37 | + { |
| 38 | + switch (lvl) |
| 39 | + { |
| 40 | + case LogLevel.Trace: |
| 41 | + return "TRACE"; |
| 42 | + case LogLevel.Debug: |
| 43 | + return "DEBUG"; |
| 44 | + case LogLevel.Information: |
| 45 | + return "INFO"; |
| 46 | + case LogLevel.Warning: |
| 47 | + return "WARN"; |
| 48 | + case LogLevel.Error: |
| 49 | + return "ERROR"; |
| 50 | + case LogLevel.Critical: |
| 51 | + return "SEVERE"; |
| 52 | + case LogLevel.None: |
| 53 | + return "NONE"; |
| 54 | + default: |
| 55 | + throw new ArgumentOutOfRangeException(nameof(lvl), lvl, null); |
| 56 | + } |
| 57 | + } |
| 58 | + |
| 59 | + public bool IsEnabled(LogLevel logLevel) |
| 60 | + { |
| 61 | + return LogLevels.Contains(logLevel); |
| 62 | + } |
| 63 | + |
| 64 | + public IDisposable BeginScope<TState>(TState state) |
| 65 | + { |
| 66 | + return new EmptyDisposable(); |
| 67 | + } |
| 68 | + } |
| 69 | +} |
0 commit comments