C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Log4Netをコードで設定


(過去ログ 86 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■51163 / inTopicNo.1)  Log4Netをコードで設定
  
□投稿者/ ましゃ (1回)-(2010/06/25(Fri) 23:58:59)

分類:[.NET 全般] 

xmlを使用せずにLog4netを初期化しようと試みているのですが、うまくいきません

以下設定の部分です
Hierarchy h = (Hierarchy)LogManager.GetLoggerRepository();
h.LoggerFactory.MakeNewLoggerInstance("logger");
Logger logger = h.GetLogger("logger", h.LoggerFactory);

//Appender作成
RollingFileAppender appender = new RollingFileAppender();
      ・・・Appenderのプロパティ設定
      
      logger.AddAppender(appender);
logger.Level = Level.ALL;

以下で、ログ出力
private static readonly ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    logger.Debug("xxx");


これでファイルは作成されるのですが、内容が出力されません。
ログの出力の前に、Logger logger = h.GetLogger("logger", h.LoggerFactory);
といった感じでloggerを取得するとAppendersプロパティに個数1となっており、Appenderははいってると思うのですが・・・

何が抜けているのでしょうか?

引用返信 編集キー/
■51167 / inTopicNo.2)  Re[1]: Log4Netをコードで設定
□投稿者/ オショウ (538回)-(2010/06/26(Sat) 07:40:37)
> これでファイルは作成されるのですが、内容が出力されません。
> ログの出力の前に、Logger logger = h.GetLogger("logger", h.LoggerFactory);
> といった感じでloggerを取得するとAppendersプロパティに個数1となっており、Appenderははいってると思うのですが・・・
>
> 何が抜けているのでしょうか?

  そういう使い方はやってないのですが・・・
  AppenderにLayout設定が抜けているということではないでしょうか?

  因みに、FileAppenderでやってみましたが、残念ながら期待通りの
  Layoutで出力されませんでした。

  まだ何か追加情報か設定が必要みたいです。

以上。参考まで
引用返信 編集キー/
■51168 / inTopicNo.3)  Re[2]: Log4Netをコードで設定
□投稿者/ オショウ (539回)-(2010/06/26(Sat) 08:04:44)
VBのコードで申し訳ない・・・

        Dim h As Hierarchy = CType(LogManager.GetRepository, Hierarchy)

        h.LoggerFactory.CreateLogger("logger")

        Dim logger As Logger

        logger = h.GetLogger("logger", h.LoggerFactory)

        Dim layout As log4net.Layout.PatternLayout = New log4net.Layout.PatternLayout

        layout.ConversionPattern = "%d %-5p - %m%n"
        layout.ActivateOptions()

        Dim appender As FileAppender = New FileAppender()

        appender.File = Application.StartupPath + "\test.log"
        appender.Layout = layout
        appender.AppendToFile = True
        appender.ActivateOptions()

        logger.AddAppender(appender)
        logger.Level = Level.All

        log4net.Config.BasicConfigurator.Configure(h, appender)

        Dim log4 As ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

        log4.Info("xxx")

以上。

引用返信 編集キー/
■51171 / inTopicNo.4)  Re[3]: Log4Netをコードで設定
□投稿者/ ましゃ (2回)-(2010/06/26(Sat) 10:25:47)
貴重な情報ありがとうございます。
log4net.Config.BasicConfigurator.Configure(h, appender)
が抜けてました。

Javaのlog4jのJavadocには
BasicConfigurator#configure(Appender appender)
Add appender to the root category.
となっているので、Rootに登録appenderを登録しないと使えないということでしょうか。。。

configureメソッドは
Root.AddAppender(appender);
Configured = true;
// Notify listeners
OnConfigurationChanged(null);
このようなメソッドが呼ばれてるので
h.Root.AddAppender(appender);
h.Configured = true;
という風にしても書き込む事が出来ましたが、OnConfigurationChangedメソッドが外部からでは呼べない(protected)でした。
Configuredをtrueにすることで設定終わりましたよっていう合図なのかな

どうもありがとうございました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -