log4net-COM相互運用機能を介して呼び出されたdllのログ
-
05-07-2019 - |
質問
COM相互運用機能を使用して別のアプリケーションから呼び出される.NET DLLを作成しました。 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");
}
ありがとう!
解決
編集-更新。質問を読み直してください。 オーバーロードされたバージョンを呼び出す必要があるようです。これ(構成ファイルの詳細を渡す)-基本的には、COM DLL内からロギングを構成するだけですか?
冗談でlog4comをgoogle'dし、これを見つけました。私はそれを使用していませんが、それは価値があるかもしれません 見て!
他のヒント
答えは、新しいリポジトリはまったく必要なかったからだと思います。私は問題を複雑にしすぎていました。この間引きバージョンは正常に動作するようです:
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");
}
ロガーとアペンダーの両方で明示的にレベルをDEBUGに設定してみてください。
所属していません StackOverflow