私はWCFサービスで特定のプロセスを実行するたびに別のログを書きます。私はすでにlog4netを使用しているアプリケーション全体の標準ログを持っています。特定のプロセス用にアペンダーとフィルターを追加して、それを削除するだけですか?このプロセスは、アップロードされたファイルの処理を処理します。他のアイデア???log4net ....個別のログファイル
2
A
答えて
1
I'vedは前に、私たちはこのようなコードのものを使用似何かの操作を行います。
Ollie第
class Program
{
static void Main(string[] args)
{
log4net.Config.BasicConfigurator.Configure();
var file = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
var log = InitialiseLogToFile(file);
log.Info("Made it here!");
log.Error("Made it here!");
var file2 = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
var log2 = InitialiseLogToFile(file2);
log2.Info("Made it here!");
log2.Error("Made it here!");
}
public static ILog InitialiseLogToFile(string file)
{
LogManager.ResetConfiguration();
var hierarchy = (Hierarchy)LogManager.GetLoggerRepository();
var patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
patternLayout.ActivateOptions();
var appender = new FileAppender {File = file, AppendToFile = true, Layout = patternLayout};
appender.ActivateOptions();
var logger = (Logger)hierarchy.GetLogger(file);
logger.AddAppender(appender);
hierarchy.Configured = true;
return LogManager.GetLogger(file);
}
}
1
オーケーあなたもIDisposableインターを実装アイログインタフェースのカスタム実装を作成する方法についてはを - あなた作成時にアペンダーを追加し、アペンダーが破棄されたら削除します。
例:
class Program
{
static void Main(string[] args)
{
log4net.Config.BasicConfigurator.Configure();
var file = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
using (var log = new CustomFileLogger(file))
{
// Process file...
log.Info("file: Made it here!");
log.Error("file: Made it here!");
}
var file2 = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid() + ".log");
using (var log = new CustomFileLogger(file2))
{
// Process file...
log.Info("file2: Made it here!");
log.Error("file2: Made it here!");
}
}
}
public sealed class CustomFileLogger : ILog, IDisposable
{
private ILog _log;
private FileAppender _appender;
private string _file;
public CustomFileLogger(string file)
{
_file = file;
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Configured = false;
var patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
patternLayout.ActivateOptions();
var appender = new FileAppender { File = file, AppendToFile = true, Layout = patternLayout };
appender.ActivateOptions();
var logger = (Logger)hierarchy.GetLogger(file);
logger.AddAppender(appender);
hierarchy.Configured = true;
_log = LogManager.GetLogger(file);
}
public ILogger Logger
{
get { return _log.Logger; }
}
public void Dispose()
{
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Configured = false;
var logger = (Logger)hierarchy.GetLogger(_file);
logger.RemoveAppender(_appender);
hierarchy.Configured = false;
_appender = null;
_log = null;
_file = null;
}
public void Debug(object message)
{
_log.Debug(message);
}
public void Debug(object message, Exception exception)
{
_log.Debug(message, exception);
}
public void DebugFormat(string format, params object[] args)
{
_log.DebugFormat(format, args);
}
public void DebugFormat(string format, object arg0)
{
_log.DebugFormat(format, arg0);
}
public void DebugFormat(string format, object arg0, object arg1)
{
_log.DebugFormat(format, arg0, arg1);
}
public void DebugFormat(string format, object arg0, object arg1, object arg2)
{
_log.DebugFormat(format, arg0, arg1, arg2);
}
public void DebugFormat(IFormatProvider provider, string format, params object[] args)
{
_log.DebugFormat(provider, format, args);
}
public void Info(object message)
{
_log.Info(message);
}
public void Info(object message, Exception exception)
{
_log.Info(message, exception);
}
public void InfoFormat(string format, params object[] args)
{
_log.InfoFormat(format, args);
}
public void InfoFormat(string format, object arg0)
{
_log.InfoFormat(format, arg0);
}
public void InfoFormat(string format, object arg0, object arg1)
{
_log.InfoFormat(format, arg0, arg1);
}
public void InfoFormat(string format, object arg0, object arg1, object arg2)
{
_log.InfoFormat(format, arg0, arg1, arg2);
}
public void InfoFormat(IFormatProvider provider, string format, params object[] args)
{
_log.InfoFormat(provider, format, args);
}
public void Warn(object message)
{
_log.Warn(message);
}
public void Warn(object message, Exception exception)
{
_log.Warn(message, exception);
}
public void WarnFormat(string format, params object[] args)
{
_log.WarnFormat(format, args);
}
public void WarnFormat(string format, object arg0)
{
_log.WarnFormat(format, arg0);
}
public void WarnFormat(string format, object arg0, object arg1)
{
_log.WarnFormat(format, arg0, arg1);
}
public void WarnFormat(string format, object arg0, object arg1, object arg2)
{
_log.WarnFormat(format, arg0, arg1, arg2);
}
public void WarnFormat(IFormatProvider provider, string format, params object[] args)
{
_log.WarnFormat(provider, format, args);
}
public void Error(object message)
{
_log.Error(message);
}
public void Error(object message, Exception exception)
{
_log.Error(message, exception);
}
public void ErrorFormat(string format, params object[] args)
{
_log.ErrorFormat(format, args);
}
public void ErrorFormat(string format, object arg0)
{
_log.ErrorFormat(format, arg0);
}
public void ErrorFormat(string format, object arg0, object arg1)
{
_log.ErrorFormat(format, arg0, arg1);
}
public void ErrorFormat(string format, object arg0, object arg1, object arg2)
{
_log.ErrorFormat(format, arg0, arg1, arg2);
}
public void ErrorFormat(IFormatProvider provider, string format, params object[] args)
{
_log.ErrorFormat(provider, format, args);
}
public void Fatal(object message)
{
_log.Fatal(message);
}
public void Fatal(object message, Exception exception)
{
_log.Fatal(message, exception);
}
public void FatalFormat(string format, params object[] args)
{
_log.FatalFormat(format, args);
}
public void FatalFormat(string format, object arg0)
{
_log.FatalFormat(format, arg0);
}
public void FatalFormat(string format, object arg0, object arg1)
{
_log.FatalFormat(format, arg0, arg1);
}
public void FatalFormat(string format, object arg0, object arg1, object arg2)
{
_log.FatalFormat(format, arg0, arg1, arg2);
}
public void FatalFormat(IFormatProvider provider, string format, params object[] args)
{
_log.FatalFormat(provider, format, args);
}
public bool IsDebugEnabled
{
get { return _log.IsDebugEnabled; }
}
public bool IsInfoEnabled
{
get { return _log.IsInfoEnabled; }
}
public bool IsWarnEnabled
{
get { return _log.IsWarnEnabled; }
}
public bool IsErrorEnabled
{
get { return _log.IsErrorEnabled; }
}
public bool IsFatalEnabled
{
get { return _log.IsFatalEnabled; }
}
}
1
あなたはこれを非常に簡単に行うことができますが、インターフェイスではなく特定の実装に身を任せることを意味します。たとえば:アペンダとして
log4net.ILog log = log4net.LogManager.GetLogger(loggerName);
log4net.Repository.Hierarchy.Logger logImpl = log.Logger as log4net.Repository.Hierarchy.Logger;
if (logImpl != null)
logImpl.AddAppender(uploadLogAppender);
else {
// unexpected logger type - handle this case somehow
}
ProcessUpload(); // does logging
if (logImpl != null)
logImpl.RemoveAppender(uploadLogAppender);
はProcessUpload
実行すると、これはあなたが必要な効果を与えるべきである間のみ存在しています。 uploadLogAppender
は、あなたが決めたファイル名(例:アップロード単位)を持つFileAppender
インスタンスです。
関連する問題
- 1. 個々のスレッドごとに個別のログファイルに記録する
- 2. PostgreSQLのエラー、システムクエリ、クエリデバッグ用の個別ログファイル
- 3. Log4Netと複数のログファイル
- 4. 別個のログファイルに書き込む
- 5. log4net - アセンブリのための異なるログファイル
- 6. C#DLL - Common.Logging(Log4Net)用の別個のapp.configファイルをロードする
- 7. log4Netログファイルが書き込まれない
- 8. log4netログファイルを暗号化する方法
- 9. Log4Netはログファイルを生成しません
- 10. カスタムプロセッサのログファイルを個別に作成する
- 11. プロジェクトの展開時にLog4netでログファイルが生成されない
- 12. log4netとazureファイルアペンダでログファイルの上限を設定する
- 13. アプリの配備時にlog4netログファイルが書き込まれない
- 14. ログファイルをパージするためのLog4net設定
- 15. log4netログファイルの名前パターンをプログラムで取得する方法は?
- 16. Azureワーカーの役割でlog4netログファイルにアクセスするには?
- 17. Log4Netはログファイルを自動的に削除できますか?
- 18. umbracoログファイルにlog4netエラーが記録されない
- 19. log4net - ログファイルはロールオーバーされていません
- 20. log4netログファイルがCで作成されていません
- 21. Log4Netログファイルからエラーメッセージを読み取る最も良い方法
- 22. Log4netがログファイルを作成していません
- 23. log4netはWindows 7でログファイルを作成しません
- 24. log4netインストール時にログファイルが作成されない
- 25. それは私はlog4netののログファイルを読み込むしようとしている別のプロセス
- 26. Springデバッグ別ログファイルへのログ
- 27. log4netの私は、次のパターンでログファイル名を作成したい間違ったログファイル名
- 28. 個別
- 29. log4net出力でのソースコンテキストの識別
- 30. 個別のカウンティングインデックス
私の問題は、おそらく私の質問から明らかではなかった。私はアップロード後にファイルを実行しています。ファイルの処理ごとにログファイルが必要です。アペンダーを追加してフィルターを使用しない場合は、1つのファイルを処理するためのメッセージだけでなく、そのファイルに加えられたすべてのログメッセージも取得します。 – CSharpAtl
その理由は、私たちは 'ResetConfiguration'と呼ばれている... – AwkwardCoder
しかし、今私は1つのアペンダーを持っていると、ログに記録する必要があるアプリに他のものがある場合、彼らは新しいファイルに記録するつもりです...このプロセスからのログを新しいファイルと通常のログファイル内の他のすべてのログに記録するだけです。 – CSharpAtl