许多人使用 log4net 我有自己的 log4net 包装,它集中了通过不同项目的所有日志记录,也节省了一些重复的引用每个项目中 log4net.dll 。
我正在使用此解决方案here。与this one一起使用,以避免在我使用包装器的项目中引用 log4net.dll 。
我让它适用于一个简单的控制台应用程序,我知道App.config的位置及其名称:
FileInfo configFileInfo = new FileInfo("App.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);
我在这里看到了潜在的问题:
简而言之:
使用包装器App.config以最舒适的方式访问它的最佳方法是什么?
答案 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包装器。