Skip to content

Commit a474bc0

Browse files
committed
refactor(Logger): 优化日志处理器的创建逻辑和参数校验
重构日志创建方法,使用 Path.DirectorySeparatorChar 替代硬编码分隔符 增加对 LogTagName 的非空校验,完善异常处理文档 统一日志文件名生成逻辑,移除冗余条件判断
1 parent ab4a088 commit a474bc0

1 file changed

Lines changed: 26 additions & 13 deletions

File tree

GameFrameX.Foundation.Logger/LogHandler.cs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,32 +65,45 @@ public static LoggerConfiguration CreateLoggerConfiguration()
6565
const string FileOutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}][{TagName}]{Message:lj}{NewLine}{Exception}";
6666

6767
/// <summary>
68-
/// 启动并配置日志系统
68+
/// 启动并配置日志系统
6969
/// </summary>
70-
/// <param name="logOptions">日志配置选项,包含日志级别、存储路径等配置信息</param>
71-
/// <param name="isDefault">是否设置为默认配置</param>
72-
/// <param name="configurationAction">自定义日志配置回调</param>
73-
/// <exception cref="ArgumentNullException">当logOptions参数为null时抛出</exception>
74-
/// <exception cref="Exception">初始化日志系统过程中发生的其他异常</exception>
70+
/// <param name="logOptions">日志配置选项,包含日志级别、存储路径等配置信息。</param>
71+
/// <param name="isDefault">是否设置为默认配置。</param>
72+
/// <param name="configurationAction">自定义日志配置回调。</param>
73+
/// <exception cref="ArgumentNullException">当 <paramref name="logOptions"/> 参数为 null 时抛出。</exception>
74+
/// <exception cref="ArgumentException">当 <paramref name="logOptions.LogTagName"/> 为空或仅包含空白字符时抛出。</exception>
75+
/// <exception cref="DirectoryNotFoundException">日志文件目录不存在且无法创建时抛出。</exception>
76+
/// <exception cref="UnauthorizedAccessException">没有权限创建日志目录或写入日志文件时抛出。</exception>
77+
/// <exception cref="Exception">初始化日志系统过程中发生的其他异常。</exception>
78+
/// <remarks>
79+
/// <para>该方法会根据传入的 <paramref name="logOptions"/> 配置初始化日志系统,支持文件、控制台、MongoDB 及 Grafana Loki 等多种输出方式。</para>
80+
/// <para>异常类型涵盖参数校验、目录创建、权限不足及日志系统初始化过程中的所有可能异常。</para>
81+
/// </remarks>
82+
/// <example>
83+
/// <code>
84+
/// var options = new LogOptions { LogTagName = "App", LogSavePath = "./logs/", IsConsole = true };
85+
/// ILogger logger = LogHandler.Create(options);
86+
/// </code>
87+
/// </example>
88+
/// <seealso cref="LogOptions"/>
89+
/// <seealso cref="ILogger"/>
7590
public static ILogger Create(LogOptions logOptions, bool isDefault = true, Action<LoggerConfiguration> configurationAction = null)
7691
{
7792
ArgumentNullException.ThrowIfNull(logOptions);
93+
ArgumentException.ThrowIfNullOrWhiteSpace(logOptions.LogTagName, nameof(logOptions.LogTagName));
7894
SerilogDiagnosis();
7995
try
8096
{
8197
// 文件名
82-
var logFileName = $"{(logOptions.LogType ?? AppDomain.CurrentDomain.FriendlyName).ToLower()}_.log";
98+
var logFileName = $"{logOptions.LogTagName}_.log";
8399
// 日志文件存储的路径
84100
var logSavePath = logOptions.LogSavePath ?? "./logs/";
85-
if (!logSavePath.EndsWithFast("/"))
101+
if (!logSavePath.EndsWith(Path.DirectorySeparatorChar))
86102
{
87-
logSavePath += "/";
103+
logSavePath += Path.DirectorySeparatorChar;
88104
}
89105

90-
if (!string.IsNullOrEmpty(logOptions.LogTagName))
91-
{
92-
logSavePath += logOptions.LogTagName + "/";
93-
}
106+
logSavePath += logOptions.LogTagName + Path.DirectorySeparatorChar;
94107

95108
// 计算最终日志文件路径
96109
var logPath = Path.Combine(logSavePath, logFileName);

0 commit comments

Comments
 (0)