microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
dev

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

146lines · modeblame

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