2

単純なWF4コンソールアプリを作成し、他のアプリと同じようにlog4netをセットアップしました。ただし、コンソールを起動してILogWF4内のオブジェクトを使用すると(実際にはワークフローに渡します)、を使用して情報が表示されませんColoredConsoleAppender。私は何が間違っているのですか?

4

2 に答える 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 に答える