Cấu hình log4net và common.logging.adapter trong code c#? Đôi khi bạn cần phải config log4net hay common.logging.adapter trong code behind thay vì config trong file app.config; Khi đó sau đây là một giải pháp.
Như một số bài trước đã đề cập, đôi khi chúng ta cần xây dựng một ứng dụng chỉ cần duy nhất một file *.exe; Khi đó việc dùng ILMerge là một giải pháp để gộp các dll vào file exe; Nhưng một số thành phần ở file *.exe.config thì không thể gộp được. Vì vậy, thay các config trong file *.exe.config bằng code trong code behind là một gải pháp. Và sau đây là cách thay việc config log4net và common.logging.adapter trong app.config bằng code c#.
Config cho log4net.
LoggingConfiguration.cs
using log4net; using log4net.Appender; using log4net.Core; using log4net.Layout; using log4net.Repository.Hierarchy; namespace LoggingConfiguration { internal static class LogConfiguration { internal static void SetupLog4net() { var hierarchy = (Hierarchy)LogManager.GetRepository(); var rollingAppender = GetRollingAppender(); var consoleAppender = GetConsoleAppender(); hierarchy.Root.AddAppender(consoleAppender); hierarchy.Root.AddAppender(rollingAppender); hierarchy.Root.Level = Level.Debug; hierarchy.Configured = true; var logger = LogManager.GetLogger(typeof(LogConfiguration)); logger.Info($"Init Log4net successfully."); } private static ConsoleAppender GetConsoleAppender() { var patternLayout = new PatternLayout(); patternLayout.ConversionPattern = "[%-40.60logger{3}] - %message%newline"; patternLayout.ActivateOptions(); var consoler = new ConsoleAppender(); consoler.Layout = patternLayout; consoler.Threshold = Level.Info; return consoler; } private static RollingFileAppender GetRollingAppender() { var patternLayout = new PatternLayout(); patternLayout.ConversionPattern = "[%date{yyyy-MM-dd HH:mm:ss.fff}] [%-5level] [%-60.60logger{3}] - %message%newline"; patternLayout.ActivateOptions(); var roller = new RollingFileAppender(); roller.AppendToFile = false; roller.File = @"Logs\Log4net.log"; roller.Layout = patternLayout; roller.MaxSizeRollBackups = 5; roller.MaximumFileSize = "2MB"; roller.RollingStyle = RollingFileAppender.RollingMode.Size; roller.StaticLogFileName = true; roller.ActivateOptions(); return roller; } } }
Cách dùng.
Program.cs
using log4net; using System; namespace LoggingConfiguration { class Program { static void Main(string[] args) { LogConfiguration.SetupLog4net(); var logger = LogManager.GetLogger(typeof(Program)); logger.Info("Wellcome to logging configuration."); Console.ReadKey(); } } }
Config cho common.logging.adapter.
LoggingConfiguration.cs
internal static void SetupCommonLogging() { var commonLoggingConfig = new Common.Logging.Configuration.NameValueCollection(); commonLoggingConfig["configType"] = "EXTERNAL"; var adapter = new Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter(commonLoggingConfig); Common.Logging.LogManager.Adapter = adapter; var logger = Common.Logging.LogManager.GetLogger(typeof(LogConfiguration)); logger.Info($"[SetupLog4net] Init common.logging successfully."); }
Lưu ý
Cách dùng.
Program.cs
static void Main(string[] args) { LogConfiguration.SetupLog4net(); LogConfiguration.SetupCommonLogging(); var logger = LogManager.GetLogger(typeof(Program)); logger.Info("Wellcome to logging configuration."); Console.ReadKey(); }
Đừng quên, để sử dụng được những dòng code trên, project của bạn phải cài đủ Nuget packages như bênh dưới.
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Common.Logging" version="3.3.1" targetFramework="net46" /> <package id="Common.Logging.Core" version="3.3.1" targetFramework="net46" /> <package id="Common.Logging.Log4Net1213" version="3.3.1" targetFramework="net46" /> <package id="log4net" version="2.0.3" targetFramework="net46" /> </packages>
Bạn có thể tải về code tham khảo tại đây.
I’m impressed, I must say. Actually hardly ever do I encounter a weblog that’s both educative and entertaining, and let me inform you, you may have hit the nail on the head. Your thought is outstanding; the issue is something that not enough persons are talking intelligently about. I am very completely happy that I stumbled throughout this in my search for something referring to this.