2017-11-27 16 views
0

Log4netをC#ソリューションで使用しています.3つのプロジェクトが1つのソリューションに含まれています。 このロガーの同じインスタンスを使用して1つのファイルにログインしたいとします。ここ はapp.configをはlog4netの同じインスタンスを使用してすべてのプロジェクトにログインします

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 

    <log4net> 
    <appender name="TestAppender" type="log4net.Appender.RollingFileAppender" > 
     <file value="C:\log\MyTestAppender.log" /> 
     <!--<file value="../../test/MyTestAppender.log" />--> 
     <encoding value="utf-8" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Date" /> 
     <!--<rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="5MB" /> 
     <staticLogFileName value="true" />--> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %level %type.%method - %message%n" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="All" /> 
     <!-- If the following line is not included the log file will not be created even if log4net is configured with this file. --> 
     <appender-ref ref="TestAppender" /> 
    </root> 
    </log4net> 


</configuration> 

であると私はすべてのプロジェクトから同じログファイルにログインするためにこれらの情報を入れる必要があります

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

をログに記録するようにこれをしました。 ありがとうたくさんありがとう

+0

あなたのapp.configやweb.configなど、あなたのプロジェクトにどのような設定があるのですか?あなたが話しているプロジェクトを指定しなければ、答えるのは難しいです。 – oerkelens

+0

同じロガーが3つのアプリケーション内にどのように存在すると思いますか?私はあなたがすでに[3つのロガーに同じログファイルにアクセスさせるのが悪い](https://stackoverflow.com/q/2586431/5265292)が実現したことを願っています。 – grek40

+0

私の解決策ではlog4netの1つのロガーしか作成されません。これは毎回同じロガーインスタンスを使用することを意味します...あなたのために働くと答えを受け入れてください –

答えて

1

ためSingletonパターンを利用することができます。この

static LogHelper() 
    { 
     log4net.Config.XmlConfigurator.ConfigureAndWatch(
      new System.IO.FileInfo(@"AppConfig\log4net.config")); 
    } 

同様

configuationファイルはこれを好む必要があります。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <!-- Register log4net --> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
    </configSections> 
    <log4net> 
     <!--log configs --> 
    </log4net> 
</configuration> 
0

私は静的なクラスの作成とログインスタンスを作成し、その静的なクラスのlogメソッドを呼び出すことを意味します。

public static class Utility 
    { 
     private static ILog log = LogManager.GetLogger("CommonLogger"); 
     public static void LogMessage(string message) 
     { 
      Task.Factory.StartNew(() => log.Info(message)); 
     } 
} 

またはまた、あなたは、静的コンストラクタで設定ファイルをロードする必要があり、この

public Class LogSingleTon 
{ 

    private static readonly Lazy<LogSingleTon> lazy = 
     new Lazy<LogSingleTon>(() => new LogSingleTon()); 

    public static LogSingleTon Instance { get { return lazy.Value; } } 
    private ILog log ; 
    private LogSingleTon() 
    { 
     log = LogManager.GetLogger("CommonLogger") 
    } 
    public void LogMessage(string message) 
    { 
     Task.Factory.StartNew(() => log.Info(message)); 
    }  

}

0

私の場合、あなたがdepedency注入フレームワークを使用している、あなたはまた、(1)インスタンスとしてあなたのlog4netのロガーを登録することができそれを使用したい場所に注射してください。

など。オートファック:

var builder = new ContainerBuilder(); 

// Log4net 
var logger = LogManager.GetLogger("[Whatever name your would like to use for your logger]"); 
builder.RegisterInstance(logger); 
関連する問題