私は1年遅れていることを知っていますが、ユーザーにロガーの動的制御を提供する必要がある同様のシナリオに遭遇しました. 幸いなことに、これは nlog を使用すると比較的簡単です。ここでは、既に作成されたロガーへのトレース レベルのログ記録を有効にしていますが、明らかに、新しいターゲット/ルールを追加したり、LoggerConfiguration をプログラムで生成されたものに完全に置き換えたりするなど、必要なことは何でもできます。
基本的な ColoredConsole nlog.config:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="c"
layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="c" />
</rules>
</nlog>
シンプルなコンソール アプリケーション:
public class Program
{
//Initialize default Logger from config file
private static readonly Logger m_log = LogManager.GetCurrentClassLogger();
public static Logger Log
{
get { return m_log; }
}
public static void Main(string[] args)
{
Log.Trace("You won't see me because config is at LogLevel.Error");
EnabledTraceForAllRules();
Log.Trace("You will see me now though!");
//Pause console window
Console.WriteLine("Press any key to continue...");
Console.ReadKey(true);
/* Prints:
2013-05-07 16:04:22.7050 TRACE You will see me now though!
Press any key to continue...
*/
}
public static void EnabledTraceForAllRules()
{
foreach(var rule in LogManager.Configuration.LoggingRules)
{
rule.EnableLoggingForLevel(LogLevel.Trace);
}
//Call to update existing Loggers created with GetLogger() or
//GetCurrentClassLogger()
LogManager.ReconfigExistingLoggers();
}
}
ログ構成をプロセス外から変更する必要があり、それをプログラムで行う必要がある場合は、WCF を使用することをお勧めします。nlog を再構成するためのメソッドを提供するアプリケーションまたは Web サイトから、小さな WCF サービスを公開できます。