Как я могу использовать log4net в библиотеке классов - PullRequest
0 голосов
/ 29 августа 2018

Я хочу настроить log4net в проекте библиотеки классов и использовать его, например, в проекте mvc.

Дело в том, что есть несколько проектов (web api, mvc app и т. Д.) Со ссылкой на Общий проект (библиотека классов) с log4net, настроенным для записи.

Я уже сделал это, но log4net ничего не пишет.

Библиотека классов:

public class Log
    {
        private readonly ILog _log;

        public Log()
        {
            _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }

        public void write(string value)
        {
            _log.Info(value);
        }

    } 

контроллер MVC, например:

public ActionResult Index()
        {
            Log oLog = new Log();

            oLog.write("ABABABAB");

            return View();
        }

Конфигурация из библиотеки классов: (App.config)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="MyLogg.txt" />
      <param name="AppendToFile" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="Header" value="" />
        <param name="Footer" value="" />
        <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
      </layout>
    </appender>
    <root>
      <!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </root>
  </log4net>
</configuration>

1 Ответ

0 голосов
/ 29 августа 2018

Файл конфигурации библиотеки классов не важен, рассматривается файл конфигурации проекта запуска. Следовательно, если вы запишите эту конфигурацию в файл конфигурации вашего проекта запуска, она, вероятно, будет работать ожидаемым образом.

Если вы хотите управлять конфигурацией из одного файла конфигурации, вы можете сгенерировать файл log4net.config и загрузить его следующим образом:

Примечание: если вы создаете отдельный файл конфигурации в общем проекте, вы изменяете свойства CopyToOutputDirectory как always или if newer.

Файл конфигурации:

<?xml version="1.0" encoding="utf-8"?>

<log4net>

<logger name="log4netFileLogger">

<appender name="log4netFileAppender" type="log4net.Appender.FileAppender">
  <file type="log4net.Util.PatternString">
    <conversionPattern value="C:\Logger\%date{yyyy-MM-dd}.log" />
  </file>

  <param name="RollingStyle" value="Date" />
  <param name="StaticLogFileName" value="false" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%newline%newline%date [%thread] %-5level - %message%newline" />
  </layout>
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="log4netFileAppender" />
</root>

</logger>

</log4net>

Класс журнала:

public class CustomLogger
{
    private readonly ILog _log;

    public CustomLogger()
    {
        var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
        var configFileDirectory = Path.Combine(baseDirectory, "log4net.config");

        FileInfo configFileInfo = new FileInfo(configFileDirectory);
        log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);

        _log = log4net.LogManager.GetLogger("log4netFileLogger");
    }

    public void Info(string value)
    {
        _log.Info(value);
    }
}

Свойства файла конфигурации:

config file properties

файл журнала:

log file

Веб-приложению нужны события перед сборкой:

xcopy /E /Y /R "$(ProjectDir)..\CommonNetFrameworkLibrary\log4net.config" "$(ProjectDir)"

pre-build

ПРИМЕЧАНИЕ. В классе Logger важен приведенный ниже код. Если вы не ищете базовый каталог, регистрация будет работать только для Консольного приложения. Причина в том, что: файл поиска консольного приложения для каталога bin, но файл поиска веб-приложения для C:\ProgramFiles\IIS.

var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var configFileDirectory = Path.Combine(baseDirectory, "log4net.config");
...