【问题标题】:Read Config From Another Project - Log4Net ASP.NET Core 3.1从另一个项目中读取配置 - Log4Net ASP.NET Core 3.1
【发布时间】:2020-09-09 16:31:02
【问题描述】:

我正在尝试编写一个使用 log4net 的类库,看起来像这样:

public class Logging
{
    private ILog log4netLogger = null;

    public Logging(Type type)
    {
        XmlDocument log4netConfig = new XmlDocument();
        log4netConfig.Load(File.OpenRead("log4net.config"));

        var repo = LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));

        XmlConfigurator.Configure(repo, log4netConfig["log4net"]);

        log4netLogger = LogManager.GetLogger(type);
    }

    public void Debug(string message)
    {
        log4netLogger(message);
    }

    public void Info(string message)
    {
        log4netLogger(message);
    }
}

但是,xml 配置在我的测试控制台应用程序C:\....\TestLogging\TestLog4Net\bin\Debug\netcoreapp3.1 中。我实际上是从这个控制台应用程序开始测试log4net,但我已将我的所有代码从Program.cs 的main 方法移动到Logging.cs 构造函数,但我认为LogManager 将无法找到这个现在。

这可能吗?

【问题讨论】:

  • 只传递正确的完整路径而不是相对路径。更好的是,将配置文件放在一个公共文件夹中
  • 您可以在解决方案中的项目之间共享文件。在Add > Existing Item 中,从按钮菜单中选择Add As Link,而不是单击Add

标签: asp.net-core log4net


【解决方案1】:

我认为这是可能的。要在类库中使用log4net,你必须在类库中安装log4net package,然后,你可以在控制台应用程序中添加类库引用并使用类库方法。但是,正如您所说,log4net.config 文件应该在控制台应用程序 netcoreapp3.1 文件夹中,否则,类库将找不到log4net.config 文件:

【讨论】:

  • 是的,奇怪的是,只要您在构建目录中有log4net.config,就像控制台应用程序的屏幕截图一样,我的代码就可以工作。我感到困惑的是XmlDocument 代码如何知道从哪里获取配置。我问的原因是为了测试我故意将配置从构建目录中取出并抛出异常说它无法从路径TestConsoleApp\bin\Debug\.... 找到配置这是因为log4net.config 在我的控制台应用程序@987654330 中被引用@?
  • 在Console app中添加Class库后,可以看到Class库的.dll文件和Console app的.exe文件都位于“.netcoreapp3.1”文件夹下,运行控制台app,默认当前目录路径为“C:\....\TestLogging\TestLog4Net\bin\Debug\netcoreapp3.1”文件夹,可以使用string defaultsPath = System.IO.Directory.GetCurrentDirectory(); if File.Exists(defaultsPath + "\\log4net.config")) { } ' to check it in the Main`方法。如果要更改 log4net.config 文件位置,则必须更改 File.OpenRead() 方法中的路径。
  • 谢谢,现在更有意义了;但是,我现在正尝试从我的 xUnit 测试项目中实例化我的 Logger.cs 类,现在默认路径是测试构建目录的 bin\debug\...。我可以将log4net.config 复制到测试项目,但这似乎有点乱。有没有办法告诉Logger.cs 始终在控制台应用程序构建目录中查找log4net.config?
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2014-03-03
相关资源
最近更新 更多