From dbfc58369538a7ce4a69dd650f520d5dae96f320 Mon Sep 17 00:00:00 2001 From: walterlv Date: Thu, 22 Aug 2024 11:37:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E6=8E=A7=E5=88=B6=E5=8F=B0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=E5=99=A8=E6=94=AF=E6=8C=81=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E4=BB=8E=E6=9E=84=E9=80=A0=E5=87=BD=E6=95=B0=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Writers/ConsoleLogger.cs | 13 ++++++++++ .../Writers/LogWritingThreadMode.cs | 25 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/dotnetCampus.Logger/Writers/ConsoleLogger.cs b/src/dotnetCampus.Logger/Writers/ConsoleLogger.cs index 0f03c51..53b1396 100644 --- a/src/dotnetCampus.Logger/Writers/ConsoleLogger.cs +++ b/src/dotnetCampus.Logger/Writers/ConsoleLogger.cs @@ -8,6 +8,9 @@ namespace dotnetCampus.Logging.Writers; +/// +/// 在控制台输出日志的日志记录器。 +/// public class ConsoleLogger : ILogger { /// @@ -17,6 +20,16 @@ public class ConsoleLogger : ILogger private readonly RepeatLoggerDetector _repeat; + /// + /// 创建一个 的新实例。 + /// + /// 指定控制台日志的线程安全模式。 + /// Main 方法的参数。 + public ConsoleLogger(LogWritingThreadMode threadMode = LogWritingThreadMode.NotThreadSafe, string[]? mainArgs = null) + : this(threadMode.CreateCoreLogWriter(), TagFilterManager.FromCommandLineArgs(mainArgs ?? [])) + { + } + internal ConsoleLogger(ICoreLogWriter coreWriter, TagFilterManager? tagManager) { _repeat = new RepeatLoggerDetector(ClearAndMoveToLastLine); diff --git a/src/dotnetCampus.Logger/Writers/LogWritingThreadMode.cs b/src/dotnetCampus.Logger/Writers/LogWritingThreadMode.cs index c540747..072db49 100644 --- a/src/dotnetCampus.Logger/Writers/LogWritingThreadMode.cs +++ b/src/dotnetCampus.Logger/Writers/LogWritingThreadMode.cs @@ -1,4 +1,7 @@ -namespace dotnetCampus.Logging.Writers; +using System; +using dotnetCampus.Logging.Writers.Helpers; + +namespace dotnetCampus.Logging.Writers; /// /// 表示如何管理日志的写入线程。 @@ -23,3 +26,23 @@ public enum LogWritingThreadMode /// ProducerConsumer, } + +/// +/// 包含 的扩展方法。 +/// +internal static class LogWritingThreadModeExtensions +{ + /// + /// 根据 创建对应的 实例。 + /// + /// 线程安全模式。 + /// 最终日志写入器。 + /// 当线程安全模式不支持时抛出。 + public static ICoreLogWriter CreateCoreLogWriter(this LogWritingThreadMode threadMode) => threadMode switch + { + LogWritingThreadMode.NotThreadSafe => new NotThreadSafeLogWriter(), + LogWritingThreadMode.Lock => new LockLogWriter(), + LogWritingThreadMode.ProducerConsumer => new ProducerConsumerLogWriter(), + _ => throw new ArgumentOutOfRangeException(nameof(threadMode)), + }; +}