ducnt преди 3 седмици
родител
ревизия
aa81324485

+ 6 - 0
EsimLao/Esim.Apis/Program.cs

@@ -6,8 +6,14 @@ using Microsoft.AspNetCore.Authentication.JwtBearer;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.IdentityModel.Tokens;
 
+using log4net;
+using log4net.Config;
+
 var builder = WebApplication.CreateBuilder(args);
 
+// Initialize log4net
+XmlConfigurator.Configure(new FileInfo(Path.Combine(builder.Environment.ContentRootPath, "log4net.config")));
+
 // Set global configuration for use by singletons like ConfigManager
 GlobalConfig.Configuration = builder.Configuration;
 

+ 1 - 1
EsimLao/Esim.Apis/appsettings.json

@@ -29,7 +29,7 @@
   "Google": {
     "ClientId": "510004579352-p8brlhu92qesea636ae2c1k96bq30u0j.apps.googleusercontent.com",
     "ClientSecret": "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",
-    "RedirectUri": "http://simgetgo.vn/auth/google/callback"
+    "RedirectUri": "https://simgetgo.vn"
   }
 
 }

+ 30 - 28
EsimLao/Esim.Apis/log4net.config

@@ -1,30 +1,32 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <log4net>
-  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
-    <!-- File log hiện tại -->
-    <file value="../../logs/apis/full.log" />
-    <appendToFile value="true" />
-    <!-- Rolling theo ngày + size -->
-    <rollingStyle value="Composite" />
-    <datePattern value="dd_MM_yyyy'.log'" /> <!-- Hậu tố ngày -->
-    <staticLogFileName value="true" /> <!-- File mới nhất luôn là full.log -->
-    <!-- Giới hạn dung lượng -->
-    <maximumFileSize value="10MB" />
-    <maxSizeRollBackups value="30" />
-    <!-- Format log -->
-    <layout type="log4net.Layout.PatternLayout">
-      <conversionPattern value="%date %-5level %logger - %message%newline" />
-    </layout>
-  </appender>
-  <appender name="console" type="log4net.Appender.ConsoleAppender">
-    <layout type="log4net.Layout.PatternLayout">
-      <conversionPattern value="%date %level - %message%newline" />
-    </layout>
-    <threshold value="ALL" />
-  </appender>
-  <root>
-    <level value="DEBUG" />
-    <appender-ref ref="RollingFileAppender" />
-    <appender-ref ref="console" />
-  </root>
+	<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
+		<!-- File log hiện tại -->
+		<file value="../logs/full.log" />
+		<appendToFile value="true" />
+		<!-- Rolling theo ngày + size -->
+		<rollingStyle value="Composite" />
+		<datePattern value="dd_MM_yyyy'.log'" />
+		<!-- Hậu tố ngày -->
+		<staticLogFileName value="true" />
+		<!-- File mới nhất luôn là full.log -->
+		<!-- Giới hạn dung lượng -->
+		<maximumFileSize value="10MB" />
+		<maxSizeRollBackups value="30" />
+		<!-- Format log -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%date %-5level %logger - %message%newline" />
+		</layout>
+	</appender>
+	<appender name="console" type="log4net.Appender.ConsoleAppender">
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%date %level - %message%newline" />
+		</layout>
+		<threshold value="ALL" />
+	</appender>
+	<root>
+		<level value="DEBUG" />
+		<appender-ref ref="RollingFileAppender" />
+		<appender-ref ref="console" />
+	</root>
 </log4net>

+ 1 - 0
EsimLao/Esim.SendMail/Esim.SendMail.csproj

@@ -14,6 +14,7 @@
     <PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
     <PackageReference Include="MailKit" Version="4.8.0" />
     <PackageReference Include="MimeKit" Version="4.8.0" />
+    <PackageReference Include="log4net" Version="2.0.15" />
   </ItemGroup>
 
   <ItemGroup>

+ 77 - 0
EsimLao/Esim.SendMail/Logging/Log4NetProvider.cs

@@ -0,0 +1,77 @@
+using log4net;
+using log4net.Config;
+using Microsoft.Extensions.Logging;
+using System.Collections.Concurrent;
+
+namespace Esim.SendMail.Logging;
+
+public class Log4NetProvider : ILoggerProvider
+{
+    private readonly ConcurrentDictionary<string, Log4NetLogger> _loggers = new();
+
+    public Log4NetProvider() { }
+
+    public ILogger CreateLogger(string categoryName)
+    {
+        return _loggers.GetOrAdd(categoryName, name => new Log4NetLogger(name));
+    }
+
+    public void Dispose()
+    {
+        _loggers.Clear();
+    }
+}
+
+public class Log4NetLogger : ILogger
+{
+    private readonly ILog _log;
+
+    public Log4NetLogger(string categoryName)
+    {
+        _log = LogManager.GetLogger(typeof(Log4NetProvider).Assembly, categoryName);
+    }
+
+    public IDisposable? BeginScope<TState>(TState state) where TState : notnull => null;
+
+    public bool IsEnabled(LogLevel logLevel)
+    {
+        return logLevel switch
+        {
+            LogLevel.Critical => _log.IsFatalEnabled,
+            LogLevel.Error => _log.IsErrorEnabled,
+            LogLevel.Warning => _log.IsWarnEnabled,
+            LogLevel.Information => _log.IsInfoEnabled,
+            LogLevel.Debug => _log.IsDebugEnabled,
+            LogLevel.Trace => _log.IsDebugEnabled,
+            _ => false
+        };
+    }
+
+    public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
+    {
+        if (!IsEnabled(logLevel)) return;
+
+        var message = formatter(state, exception);
+        if (string.IsNullOrEmpty(message) && exception == null) return;
+
+        switch (logLevel)
+        {
+            case LogLevel.Critical: _log.Fatal(message, exception); break;
+            case LogLevel.Error: _log.Error(message, exception); break;
+            case LogLevel.Warning: _log.Warn(message, exception); break;
+            case LogLevel.Information: _log.Info(message, exception); break;
+            case LogLevel.Debug: _log.Debug(message, exception); break;
+            case LogLevel.Trace: _log.Debug(message, exception); break;
+        }
+    }
+}
+
+public static class Log4NetExtensions
+{
+    public static ILoggingBuilder AddLog4Net(this ILoggingBuilder builder, string configPath)
+    {
+        XmlConfigurator.Configure(new FileInfo(configPath));
+        builder.AddProvider(new Log4NetProvider());
+        return builder;
+    }
+}

+ 7 - 0
EsimLao/Esim.SendMail/Program.cs

@@ -1,10 +1,14 @@
 using Database.Database;
 using Esim.SendMail.Services;
 using Microsoft.EntityFrameworkCore;
+using Esim.SendMail.Logging;
 using Microsoft.Extensions.Logging;
 
+
+
 namespace Esim.SendMail;
 
+
 public class Program
 {
     public static async Task Main(string[] args)
@@ -14,9 +18,12 @@ public class Program
         // Add configuration
         builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
 
+
         // Configure logging
         builder.Logging.ClearProviders();
         builder.Logging.AddConsole();
+        // Initialize and add Log4Net
+        builder.Logging.AddLog4Net(Path.Combine(builder.Environment.ContentRootPath, "log4net.config"));
         builder.Logging.SetMinimumLevel(LogLevel.Information);
 
         // Add DbContext