1. ホーム
  2. c#

[解決済み] log4netの設定をコンフィグファイルではなく、コードで行うことは可能ですか?

2022-05-24 02:56:11

質問

log4netがなぜ app.config ファイルを使用する理由は理解できます。コードを再コンパイルすることなく、情報の記録方法を簡単に変更できるからです。しかし、私の場合、ログを記録するために app.config ファイルを実行ファイルに同梱したくないのです。そして、私のロギング設定を変更したいとは思いません。

を使用するのではなく、コードでロギングを設定する方法はありますか? app.config ?

以下は私の簡単な設定ファイルです。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\EventLog.txt" />
      <appendToFile value="false" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="1GB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
    </appender>
    <root>
      <level value="Info" />
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="MemoryAppender" />
    </root>
  </log4net>
</configuration>

EDITです。

完全に明らかにするために:それは、XML ファイルを持たないことが私の目標です。ストリームに変換する埋め込みリソースとしてでさえありません。私の目標は、ロガーを完全にプログラム的に定義することでした。それが可能かどうか、可能な場合、構文の例をどこで見つけることができるかに興味があるだけです。

どのように解決するのですか?

最終的な解決方法です。 <サブ 1

将来この問題にぶつかるかもしれない人のために、私がやったことを説明します。以下のような静的なクラスを作りました。

using log4net;
using log4net.Repository.Hierarchy;
using log4net.Core;
using log4net.Appender;
using log4net.Layout;

namespace Spectrum.Logging
{
    public class Logger
    {
        public static void Setup()
        {
            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
            patternLayout.ActivateOptions();

            RollingFileAppender roller = new RollingFileAppender();
            roller.AppendToFile = false;
            roller.File = @"Logs\EventLog.txt";
            roller.Layout = patternLayout;
            roller.MaxSizeRollBackups = 5;
            roller.MaximumFileSize = "1GB";
            roller.RollingStyle = RollingFileAppender.RollingMode.Size;
            roller.StaticLogFileName = true;            
            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);

            MemoryAppender memory = new MemoryAppender();
            memory.ActivateOptions();
            hierarchy.Root.AddAppender(memory);

            hierarchy.Root.Level = Level.Info;
            hierarchy.Configured = true;
        }
    }
}

そして、XMLファイルを呼び出すコードを以下の呼び出しに置き換えるだけでよかったのです。

//XmlConfigurator.Configure(new FileInfo("app.config")); // Not needed anymore
Logger.Setup();


1 (この回答はOPによって質問に編集されたもので、私は勝手にコミュニティの回答にしてしまいました。 理由はこちら )