1

COM相互運用機能を使用して別のアプリケーションから呼び出される.NETDLLを作成しました。log4netを使用したいのですが、他のアプリケーションから実行時にログファイルの場所を指定する必要があります。

私は常にWinFormsプロジェクトで可能な限り簡単な方法でlog4netを使用してきましたが、DLLプロジェクトにはapp.configがなく、呼び出し元のアプリケーションにもapp.configがないため(.NETでもありません)、 log4netがどのように機能するかについて少し調べて、.configファイルをまったく使用せずに設定しようとしました。

コンパイルする段階に到達し、log4netについての私の小さな理解にある程度準拠していますが、ログファイルには書き込まれません。

これが私がこれまでに持っているものです、誰かが私の明白なエラー/誤解を指摘することができますか、そうでなければ私のdllからログを記録するより良い方法を教えてくれますか?

    private log4net.Core.ILogger _ilogger;
    private ILog _logger;

    public void Initialize(String LogFileName)
    {
        log4net.Repository.ILoggerRepository Repo = null;
        try {
            Repo = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly().FullName);

        } catch (log4net.Core.LogException) {
            //ignore, domain not yet created
        }

        if (Repo == null) {
            Repo = log4net.LogManager.CreateRepository(Assembly.GetExecutingAssembly().FullName);

            log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender();
            appender.Layout = new log4net.Layout.PatternLayout("%d - %m%n");
            appender.File = LogFileName;
            appender.MaxSizeRollBackups = 10;
            appender.MaximumFileSize = "100MB";
            appender.AppendToFile = true;
            appender.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug
            appender.ActivateOptions();

            Repo.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug

            log4net.Config.BasicConfigurator.Configure(Repo, appender);
        }

       // This doesn't seem to create the interface I need for logging
        _ilogger = Repo.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);

       // This doesn't seem to write to the log file for some reason.
        _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
        _logger.Debug("Application started");
    }

ありがとう!

4

3 に答える 3

3

編集-更新。質問を読み直してください。これのオーバーロードされたバージョンを呼び出す必要があるようです(構成ファイルの詳細を渡す)-基本的には、COM DLL内からロギングを構成したいだけですか?

冗談めかして私はlog4comをグーグルで検索し、これを見つけました。使ったことはありませんが、一見の価値があるかもしれません!

于 2009-09-11T11:31:47.280 に答える
3

答えは、新しいリポジトリはまったく必要なかったということだと思います。私はただ問題を複雑にしすぎていました。この間引きされたバージョンは正常に機能しているようです。

public void Initialize(String LogFileName)
    {
        log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender();
        appender.Layout = new log4net.Layout.PatternLayout("%d - %m%n");
        appender.File = LogFileName;
        appender.MaxSizeRollBackups = 10;
        appender.MaximumFileSize = "100MB";
        appender.AppendToFile = true;
        appender.Threshold = log4net.Core.Level.Debug;
        appender.ActivateOptions();
        log4net.Config.BasicConfigurator.Configure(appender);

        _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
        _logger.Debug("Application started");
    }
于 2009-09-11T13:13:09.953 に答える
1

LoggerとAppenderの両方でレベルをDEBUGに明示的に設定してみてください。

于 2009-09-11T11:47:24.777 に答える