Как включить / отключить ведение журнала и информацию о файлах, хранящихся в конфигурации через код? - PullRequest
5 голосов
/ 21 июня 2010

У меня есть фреймворк, который использует log4net для регистрации, я знаю, что мы можем отключить или включить желаемую запись в log4net через файл конфигурации. Я хочу разработать некоторый класс настроек, чтобы администратор или пользователь мог настроить ведение журнала и т. Д. Что такое класс и т. Д. В log4net для получения файла конфигурации и изменения настроек в файле конфигурации с помощью кода? (есть ли или я должен использовать .net System.Xml) Какие-нибудь фрагменты кода?

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

  <root>
    <level value="ALL" />
    <!--<appender-ref ref="LogFileAppender" />-->
    <!--<appender-ref ref="ConsoleAppender" />-->
    <appender-ref ref="DEBUG-RollingLogFileAppender" />
    <appender-ref ref="Error-RollingLogFileAppender" />
  </root>

  <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
    <param name="File" value="log-file.txt" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="Header" value="[Header]\r\n"/>
      <param name="Footer" value="[Footer]\r\n"/>
      <param name="ConversionPattern" value="%d [%t] %-5p %c %ndc %P{auth} - %m%n" />
    </layout>
  </appender>

  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c %ndc %P{auth} - %m%n" />
    </layout>
  </appender>

  <appender name="DEBUG-RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <param name="File" value="..\\logs\\debug" />
    <param name="AppendToFile" value="true" />
    <param name="StaticLogFileName" value="false" />
    <param name="RollingStyle" value="Composite" />
    <param name="DatePattern" value=".yyyyMMdd'.log'" />
    <param name="MaxSizeRollBackups" value="30" />
    <param name="MaximumFileSize" value="5MB" />
    <layout type="log4net.Layout.PatternLayout,log4net">
      <!--<param name="ConversionPattern" value="%d [%t] %-5p %c %ndc %P{auth} - %m%n" />-->
      <param name="ConversionPattern" value="%d [%t] %-5p - %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <!--<levelMin value="INFO" />-->
      <levelMax value="INFO" />
    </filter>
  </appender>

  <appender name="Error-RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <param name="Threshold" value="WARN"/>
    <param name="File" value="..\\logs\\errors" />
    <param name="AppendToFile" value="true" />
    <param name="StaticLogFileName" value="false" />
    <param name="RollingStyle" value="Composite" />
    <param name="DatePattern" value=".yyyyMMdd'.log'" />
    <param name="MaxSizeRollBackups" value="30" />
    <param name="MaximumFileSize" value="5MB" />
    <layout type="log4net.Layout.PatternLayout,log4net">
        <header value="&#13;&#10;" />
        <footer value="&#13;&#10;======================================================================" />
      <param name="ConversionPattern" value="%d [%t] %-5p - %m%n" />
    </layout>
  </appender>

</log4net>

Ответы [ 2 ]

4 голосов
/ 21 июня 2010

Ваш вопрос не совсем ясен: вы пытаетесь изменить текущую конфигурацию программно или изменить конфигурацию файл программно?

Если это последняя, ​​я неЯ не думаю, что вам нужно что-либо из самого log4net - и я бы не ожидал, что он предоставит API для манипулирования файлом.Вместо этого я бы использовал LINQ to XML (при условии .NET 3.5 или выше) и управлял им напрямую.Похоже, все довольно просто.Изучите формат файла конфигурации, определите, какие изменения вы хотите внести в него, затем напишите соответствующий код для него.Для этого вам даже не нужно ссылаться на log4net.

0 голосов
/ 10 июня 2019

кажется, что вы можете использовать Peter's answer и добавить или удалить appender

Создайте все приложения в веб-конфигурации и после строки:

log4net.Config.XmlConfigurator.Configure();

Повтор:

var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
 foreach (var appender in root.Appenders)
  Console.WriteLine(appender.Name);

Удалить:

var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
IAppender removedAppender = null;
if (root.Appenders.ToArray().Where(x => x.Name == "GelfUdpAppender").Any())
    removedAppender = root.RemoveAppender("GelfUdpAppender");

Добавить:

FileAppender appender = new FileAppender();
appender.Name = "RollingFileAppender";
appender.File = "Log.log";
appender.AppendToFile = true;

PatternLayout layout = new PatternLayout();
layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
layout.ActivateOptions();

appender.Layout = layout;
appender.ActivateOptions();

var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
root.AddAppender(appender);
...