Skip to content

Commit dbfc583

Browse files
committed
使控制台日志记录器支持直接从构造函数创建。
1 parent 019c6fb commit dbfc583

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

src/dotnetCampus.Logger/Writers/ConsoleLogger.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
namespace dotnetCampus.Logging.Writers;
1010

11+
/// <summary>
12+
/// 在控制台输出日志的日志记录器。
13+
/// </summary>
1114
public class ConsoleLogger : ILogger
1215
{
1316
/// <summary>
@@ -17,6 +20,16 @@ public class ConsoleLogger : ILogger
1720

1821
private readonly RepeatLoggerDetector _repeat;
1922

23+
/// <summary>
24+
/// 创建一个 <see cref="ConsoleLogger"/> 的新实例。
25+
/// </summary>
26+
/// <param name="threadMode">指定控制台日志的线程安全模式。</param>
27+
/// <param name="mainArgs">Main 方法的参数。</param>
28+
public ConsoleLogger(LogWritingThreadMode threadMode = LogWritingThreadMode.NotThreadSafe, string[]? mainArgs = null)
29+
: this(threadMode.CreateCoreLogWriter(), TagFilterManager.FromCommandLineArgs(mainArgs ?? []))
30+
{
31+
}
32+
2033
internal ConsoleLogger(ICoreLogWriter coreWriter, TagFilterManager? tagManager)
2134
{
2235
_repeat = new RepeatLoggerDetector(ClearAndMoveToLastLine);

src/dotnetCampus.Logger/Writers/LogWritingThreadMode.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
namespace dotnetCampus.Logging.Writers;
1+
using System;
2+
using dotnetCampus.Logging.Writers.Helpers;
3+
4+
namespace dotnetCampus.Logging.Writers;
25

36
/// <summary>
47
/// 表示如何管理日志的写入线程。
@@ -23,3 +26,23 @@ public enum LogWritingThreadMode
2326
/// </remarks>
2427
ProducerConsumer,
2528
}
29+
30+
/// <summary>
31+
/// 包含 <see cref="LogWritingThreadMode"/> 的扩展方法。
32+
/// </summary>
33+
internal static class LogWritingThreadModeExtensions
34+
{
35+
/// <summary>
36+
/// 根据 <see cref="LogWritingThreadMode"/> 创建对应的 <see cref="ICoreLogWriter"/> 实例。
37+
/// </summary>
38+
/// <param name="threadMode">线程安全模式。</param>
39+
/// <returns>最终日志写入器。</returns>
40+
/// <exception cref="ArgumentOutOfRangeException">当线程安全模式不支持时抛出。</exception>
41+
public static ICoreLogWriter CreateCoreLogWriter(this LogWritingThreadMode threadMode) => threadMode switch
42+
{
43+
LogWritingThreadMode.NotThreadSafe => new NotThreadSafeLogWriter(),
44+
LogWritingThreadMode.Lock => new LockLogWriter(),
45+
LogWritingThreadMode.ProducerConsumer => new ProducerConsumerLogWriter(),
46+
_ => throw new ArgumentOutOfRangeException(nameof(threadMode)),
47+
};
48+
}

0 commit comments

Comments
 (0)