microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v2.0.0-preview.6

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Common/Logging/ConsoleLogger.cs

143lines · modecode

1using System.Reflection;
2using System.Text;
3using System.Text.RegularExpressions;
4
5using Microsoft.Teams.Common.Text;
6
7namespace Microsoft.Teams.Common.Logging;
8
9public partial class ConsoleLogger<T>(LogLevel level = LogLevel.Info) : ConsoleLogger(typeof(T).Name, level), ILogger<T>;
10public partial class ConsoleLogger : ILogger
11{
12 public string Name { get; }
13 public LogLevel Level { get; set; }
14
15 protected Regex _pattern;
16
17 public ConsoleLogger(string? name = null, LogLevel level = LogLevel.Info)
18 {
19 Name = name ?? Assembly.GetEntryAssembly()?.GetName().Name ?? "Microsoft.Teams";
20 Level = Environment.GetEnvironmentVariable("LOG_LEVEL")?.ToLogLevel() ?? level;
21 _pattern = ParseMagicExpression(Environment.GetEnvironmentVariable("LOG") ?? "*");
22 }
23
24 public ConsoleLogger(LoggingSettings settings)
25 {
26 Name = Assembly.GetEntryAssembly()?.GetName().Name ?? "Microsoft.Teams";
27 Level = settings.Level;
28 _pattern = ParseMagicExpression(settings.Enable);
29 }
30
31 public ConsoleLogger(IServiceProvider provider)
32 {
33 var settings = (LoggingSettings?)provider.GetService(typeof(LoggingSettings)) ?? new();
34 Name = Assembly.GetEntryAssembly()?.GetName().Name ?? "Microsoft.Teams";
35 Level = settings.Level;
36 _pattern = ParseMagicExpression(settings.Enable);
37 }
38
39 public void Debug(params object?[] args)
40 {
41 Log(LogLevel.Debug, args);
42 }
43
44 public void Error(params object?[] args)
45 {
46 Log(LogLevel.Error, args);
47 }
48
49 public void Info(params object?[] args)
50 {
51 Log(LogLevel.Info, args);
52 }
53
54 public void Warn(params object?[] args)
55 {
56 Log(LogLevel.Warn, args);
57 }
58
59 public void Log(LogLevel level, params object?[] args)
60 {
61 Write(level, args);
62 }
63
64 public ILogger Create(string name)
65 {
66 var logger = new ConsoleLogger(name, Level);
67 logger._pattern = _pattern;
68 return logger;
69 }
70
71 public ILogger Child(string name)
72 {
73 var logger = new ConsoleLogger($"{Name}.{name}", Level);
74 logger._pattern = _pattern;
75 return logger;
76 }
77
78 public ILogger Peer(string name)
79 {
80 var parts = Name.Split('.').ToList();
81 parts.RemoveAt(parts.Count - 1);
82 var logger = new ConsoleLogger($"{string.Join(".", parts)}.{name}", Level);
83 logger._pattern = _pattern;
84 return logger;
85 }
86
87 public bool IsEnabled(LogLevel level)
88 {
89 return level <= Level && _pattern.IsMatch(Name);
90 }
91
92 public ILogger SetLevel(LogLevel level)
93 {
94 Level = level;
95 return this;
96 }
97
98 public object Clone() => MemberwiseClone();
99 public ILogger Copy() => (ILogger)Clone();
100
101 protected void Write(LogLevel level, params object?[] args)
102 {
103 if (!IsEnabled(level)) return;
104
105 var name = new StringBuilder()
106 .Append(
107 level.Color(),
108 new StringBuilder().Bold(Name).ToString()
109 )
110 .Reset()
111 .ToString();
112
113 var prefix = new StringBuilder()
114 .Append(
115 level.Color(),
116 new StringBuilder().Bold($"[{level.ToString()?.ToUpper()}]").ToString()
117 ).ToString();
118
119 foreach (var arg in args)
120 {
121 var text = arg?.ToString() ?? "null";
122
123 foreach (var line in text.Split('\n'))
124 {
125 Console.WriteLine("{0} {1} {2}", prefix, name, line);
126 }
127 }
128 }
129
130 protected Regex ParseMagicExpression(string pattern)
131 {
132 var res = "";
133 var parts = pattern.Split('*');
134
135 for (var i = 0; i < parts.Length; i++)
136 {
137 if (i > 0) res += ".*";
138 res += parts[i];
139 }
140
141 return new Regex(res);
142 }
143}