microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
copilot/sub-pr-309

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

146lines · modecode

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