访问log4net包装器的最佳方式App.config

时间:2016-05-13 15:25:39

标签: c# .net log4net log4net-configuration

许多人使用 log4net 我有自己的 log4net 包装,它集中了通过不同项目的所有日志记录,也节省了一些重复的引用每个项目中 log4net.dll

我正在使用此解决方案here。与this one一起使用,以避免在我使用包装器的项目中引用 log4net.dll

我让它适用于一个简单的控制台应用程序,我知道App.config的位置及其名称:

FileInfo configFileInfo = new FileInfo("App.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);

我在这里看到了潜在的问题:

  1. 每个项目都有自己的App.config。
  2. 此文件可以将其名称更改为{projectname} .config。 (也许在发布?)
  3. App.config文件属性包含复制,嵌入等选项(但确切地说,它可以与其他App.config混合使用吗?)
  4. 简而言之:

    使用包装器App.config以最舒适的方式访问它的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

您从AppDomain.CurrentDomain.SetupInformation.ConfigurationFile获取配置文件名:

  

配置文件描述了搜索规则和配置   应用程序域的数据。创建应用程序的主机   域负责提供此数据因为有意义   价值因情况而异。

     

例如,存储ASP.NET应用程序的配置数据   对于每个应用程序,站点和计算机,同时配置数据   为每个应用程序,用户和计算机存储可执行文件。   只有主机知道a的配置数据的细节   特殊情况。

答案 1 :(得分:0)

您可以获取执行文件的名称,该文件为您提供配置文件的名称。类似的东西:

Assembly.GetCallingAssembly();

Assembly.GetExecutingAssembly();

答案 2 :(得分:0)

有很多方法可以解决这个问题,具体取决于具体要求,在我的情况下,我以编程方式创建了log4net配置:

var hierarchy = (Hierarchy)log4net.LogManager.GetRepository();

var patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
patternLayout.ActivateOptions();

var console = new ConsoleAppender();
console.Layout = patternLayout;

var roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.File = Path.Combine(Logger.LogPath, "log.txt");
roller.Layout = patternLayout;
roller.MaxSizeRollBackups = 5;
roller.MaximumFileSize = "100MB";
roller.RollingStyle = RollingFileAppender.RollingMode.Size;
roller.StaticLogFileName = true;
roller.ActivateOptions();

hierarchy.Root.AddAppender(console);
hierarchy.Root.AddAppender(roller);

MemoryAppender memory = new MemoryAppender();
memory.ActivateOptions();
hierarchy.Root.AddAppender(memory);

hierarchy.Root.Level = Level.Debug;
hierarchy.Configured = true;

另一种方法可能是按照其中一条评论中的建议嵌入它。

由于我的包装器是一个库,因此为该包装器库创建一个特定的app.config是没有意义的,因此配置选项可以设置到最终的app.config文件中,其中将使用log4net包装器。