Arhn - архитектура программирования

Чтение конфигурации из другого проекта — Log4Net ASP.NET Core 3.1

Я пытаюсь написать библиотеку классов, которая использует 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, но я переместил весь свой код из метода main Program.cs в конструктор Logging.cs, но я думаю, что LogManager не сможет найти его сейчас.

Это вообще возможно?

09.09.2020

  • Просто передайте правильный полный путь вместо относительного пути. А еще лучше положить файл конфигурации в общую папку 10.09.2020
  • Вы можете обмениваться файлами между проектами в решении. В Add > Existing Item выберите Add As Link в меню кнопки вместо нажатия Add 10.09.2020

Ответы:


1

Я думаю, что это возможно. Чтобы использовать log4net в библиотеке классов, необходимо установить log4net package в библиотеке классов, то вы можете добавить ссылку на библиотеку классов в консольное приложение и использовать метод библиотеки классов. Но, как вы сказали, файл log4net.config должен находиться в папке netcoreapp3.1 консольного приложения, иначе библиотека классов не найдет файл log4net.config:

введите здесь описание изображения

10.09.2020
  • Да, как ни странно, мой код работает только до тех пор, пока у вас есть log4net.config в каталоге сборки, как на снимке экрана для консольного приложения. Что меня смущает, так это то, как код XmlDocument знает, откуда именно взять конфигурацию. Причина, по которой я прошу, заключается в том, чтобы проверить, что я намеренно вынул конфигурацию из каталога сборки, и он выдал исключение, говоря, что не может найти конфигурацию по пути TestConsoleApp\bin\Debug\.... Это потому, что log4net.config упоминается в моем консольном приложении csproj? 10.09.2020
  • После добавления библиотеки классов в консольное приложение вы можете видеть, что файл .dll библиотеки классов и файл .exe консольного приложения находятся в папке .netcoreapp3.1. При запуске консольного приложения текущим путем к каталогу по умолчанию является 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(). 11.09.2020
  • Спасибо, теперь это имеет больше смысла; однако сейчас я пытаюсь создать экземпляр своего класса Logger.cs из моего тестового проекта xUnit, и теперь путь по умолчанию — это bin\debug\... каталога тестовой сборки. Я мог бы скопировать log4net.config в тестовый проект, но это выглядит немного беспорядочно. Есть ли способ сказать Logger.cs всегда искать в каталоге сборки консольного приложения log4net.config? 11.09.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..