using Microsoft.Extensions.Configuration; using Serilog; using System; using System.IO; namespace CoreAgent.Infrastructure.Logging { public static class ApplicationLogger { private static readonly object _lock = new object(); private static bool _isInitialized; public static void Initialize(IConfiguration configuration) { ArgumentNullException.ThrowIfNull(configuration, nameof(configuration)); if (_isInitialized) { return; } lock (_lock) { if (_isInitialized) { return; } try { // 确保日志目录存在 var logDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs"); Directory.CreateDirectory(logDirectory); // 从配置文件初始化 Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); _isInitialized = true; Log.Information("Logger initialized successfully"); } catch (Exception ex) { // 如果初始化失败,创建一个基本的控制台日志记录器 Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .CreateLogger(); _isInitialized = true; Log.Error(ex, "Failed to initialize logger with full configuration"); } } } public static void EnsureInitialized() { if (!_isInitialized) { throw new InvalidOperationException("Logger has not been initialized. Call Initialize() first."); } } } }