単純なWF4コンソールアプリを作成し、他のアプリと同じようにlog4netをセットアップしました。ただし、コンソールを起動してILog
WF4内のオブジェクトを使用すると(実際にはワークフローに渡します)、を使用して情報が表示されませんColoredConsoleAppender
。私は何が間違っているのですか?
2000 次
2 に答える
3
ワークフロートレース出力はトレースリスナーに書き込まれます。私が知る限り、log4netはデフォルトでトレースリスナーに書き込まれた出力をログに記録しません。私はlog4netの専門家ではないので、もっと簡単な方法があるかもしれませんが、すべてのデータをlog4netに渡すだけのTraceListenerを作成するのは難しくありません。次のコードは、簡単なテストで問題なく機能しました。
public class Log4netTraceListener : TraceListener
{
private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, params object[] data)
{
base.TraceData(eventCache, source, eventType, id, data);
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
var logger = LogManager.GetLogger(source);
switch (eventType)
{
case TraceEventType.Critical:
logger.Fatal(data);
break;
case TraceEventType.Error:
logger.Error(data);
break;
case TraceEventType.Information:
logger.Info(data);
break;
case TraceEventType.Verbose:
logger.Debug(data);
break;
case TraceEventType.Warning:
logger.Warn(data);
break;
default:
base.TraceData(eventCache, source, eventType, id, data);
break;
}
}
public override void Write(string message)
{
_log.Info(message);
}
public override void WriteLine(string message)
{
_log.Info(message);
}
次に、app.configの次のコードを使用して、アクティビティトレース情報がこのTraceListenerに送信されることを確認する必要があります。
<system.diagnostics>
<sources>
<source name="System.Activities"
switchValue="Verbose">
<listeners>
<add name="Test"
type="WorkflowConsoleApplication17.Log4netTraceListener, WorkflowConsoleApplication17"/>
</listeners>
</source>
</sources>
</system.diagnostics>
于 2010-06-06T09:40:22.880 に答える
3
アクティビティがコンテキストから取得できるワークフローの拡張機能を作成します。
var wf = new WorkflowApplication(myActivity);
var log = new MyLogForNetExtensionLol();
wf.Extensions.Add(log);
次に、アクティビティ内で:
var log = context.GetExtension<ILog>();
log.Write("Worked!");
于 2010-07-25T19:26:56.213 に答える