如何在WF4中使用log4net?

时间:2010-06-03 19:40:33

标签: log4net workflow-foundation workflow-foundation-4 consoleappender

我创建了一个简单的WF4控制台应用程序,并将log4net设置为与我的其他应用程序完全相同。但是,当我启动控制台并使用WF4中的ILog对象(我实际将其传递到工作流程中)时,使用我的ColoredConsoleAppender不会显示任何信息。我做错了什么?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:3)