2

C# で log4net を使用して、RollingFileAppender のファイル名にパターンを指定するために PatternString を使用したいと思います。これは構成ファイルで簡単に行うことができ、オンラインには多くの例があります。ただし、C# コードで同じことをしたいと思います。

これは、構成ファイルで行われる方法です。

 <file type="log4net.Util.PatternString" value="C:\Log\MyLogFile.[%processid].txt" />

以下の私のコードは、構成ファイルなしで log4net をセットアップすることに関するすべてを行います。上記の PatternString 行を除きます。コードで RollingFileAppender の PatternString を指定するにはどうすればよいですか?

私のコードは次のようになります。

public class Log4NetInitializer
{
    public static void Setup()
    {
        Hierarchy hierarchy = (Hierarchy) LogManager.GetRepository();

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

        RollingFileAppender fileLogRoot = new RollingFileAppender();
        fileLogRoot.AppendToFile = true;
        fileLogRoot.File = @"C:\Log\MyLogFile.txt";
        fileLogRoot.Layout = patternLayout;
        fileLogRoot.MaxSizeRollBackups = 5;
        fileLogRoot.Encoding = Encoding.UTF8;
        fileLogRoot.LockingModel = new FileAppender.MinimalLock();
        fileLogRoot.ActivateOptions();
        hierarchy.Root.AddAppender(fileLogRoot);

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

3 に答える 3

2

同等のものはないようです(または、私はそれを見つけることができませんでした)、とにかく「チート」して自分で交換することができます:

...
var pId = System.Diagnostics.Process.GetCurrentProcess().Id;
fileLogRoot.File = string.Format(@"C:\Log\MyLogFile.{0}.txt", pId);
...        
于 2013-11-11T12:41:14.093 に答える
-1

これはおそらくあなたの質問に直接答えるものではありませんが、(XML を構成ファイルに入れるのではなく) コードで XML を介して log4net (および NLog) を構成できます。しばらく前にそれについての質問/回答を投稿しました。

ここにリンクがあります:

コードから XML を使用して log4net または NLog を構成する

私の投稿は、XML をどこかに事前定義/保存する (私の場合、私たちのプロジェクトは XML 構成を定義してデータベースに保存することを考えていました)、XML を (文字列として) 読み取り、それを直接設定するという観点からのものです。 log4net または NLog 構成オブジェクト。このアプローチを使用して実際に何かを実装することはできませんでしたが、私の限られたテストでは、うまく機能しているように見えました.

于 2013-11-11T15:53:58.460 に答える