5

ロギングに 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>
4

2 に答える 2

4

あなたの質問は明確ではありません.現在実行中の構成をプログラムで変更しようとしていますか、それとも構成ファイルをプログラムで変更しようとしていますか?

後者の場合、log4net 自体からは何も必要ないと思います。また、ファイルを操作するための API を提供することも特に期待していません。代わりに、LINQ to XML (.NET 3.5 以降を想定) を使用して、自分で直接操作します。見た目からして、とてもシンプルです。構成ファイルの形式を調べて、どのような変更を加えたいかを考えてから、適切なコードを記述してください。これには log4net を参照する必要さえありません。

于 2010-06-21T06:38:16.597 に答える
3

ピーターの答えを使用して、アペンダーを追加または削除できるようです

Web 構成と次の行の後にすべてのアペンダーを作成します。

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);
于 2019-06-10T14:09:35.167 に答える