c# c#教學 - 如何通過log4net記錄機器名稱?




library config (3)

您可以使用預先填充的屬性log4net:HostName ,例如:

<conversionPattern value="%property{log4net:HostName}" />

這樣您就不需要填充MDC。

我正在使用Log4Net和AdoNetAppender將消息從簡單的系統托盤應用程序記錄到SQL Server 2005數據庫中。

我想記錄機器名稱和日誌消息,因為這個應用程序將在多台機器上運行,我需要知道消息來自哪一個。

但是,我找不到通過我使用appender的log4net.Layout.PatternLayout公開這些信息的方法。

有沒有辦法以這種方式通過log4net記錄機器名稱?


您可以創建類似於以下內容的參數:

<parameter>
  <parameterName value="@machine" />
  <dbType value="String" />
  <size value="255" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%X{machine}" />
  </layout>
</parameter>

然後在寫入日誌之前添加此行: MDC.Set("machine", Environment.MachineName);


如果您知道要傳遞的參數,請為該類型執行Action<T> 。 例:

void LoopMethod (Action<int> code, int count) {
     for (int i = 0; i < count; i++) {
         code(i);
     }
}

如果要將參數傳遞給方法,請使方法通用:

void LoopMethod<T> (Action<T> code, int count, T paramater) {
     for (int i = 0; i < count; i++) {
         code(paramater);
     }
}

和來電者代碼:

Action<string> s = Console.WriteLine;
LoopMethod(s, 10, "Hello World");

更新。 您的代碼應如下所示:

private void Include(IList<string> includes, Action<string> action)
{
    if (includes != null)
    {
         foreach (var include in includes)
             action(include);
    }
}

public void test()
{
    Action<string> dg = (s) => {
        _context.Cars.Include(s);
    };
    this.Include(includes, dg);
}






c# .net logging log4net