原專案用的Log4Net,不過版本比較舊,在Core裡新版也進行了支援,本文用的是現在最新版本2.0.8

1、LogHelper幫助類放另一個類庫中 Log/LogHelper.cs

2、單獨建的配置檔案放在主專案下,LogConfig/Log4Net.config

具體位置如下圖:

LogHelper.cs內容
升級版本後本來的LogManager.GetLogger()方法要指定Repository 看文章都是要CreateRepository一個.
  private static readonly ILoggerRepository Repository = LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(Hierarchy))
不過我這樣寫就是不行,沒有報錯日誌也不會寫入.後面研究半天用GetRepository解決.
  private static readonly ILoggerRepository Repository = LogManager.GetRepository(Assembly.GetCallingAssembly());
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.Concurrent;
using System.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using log4net.Repository;
using log4net.Repository.Hierarchy; //指定log4net使用的config檔案來讀取配置資訊
[assembly: XmlConfigurator(ConfigFile = @"LogConfig\Log4Net.config", Watch = true)]
namespace C.Until
{
/// <summary>
/// 日誌幫助類
/// </summary>
public class LogHelper
{
#region 舊版本
//private static readonly ILog Loginfo = LogManager.GetLogger("loginfo");
//private static readonly ILog LogError = LogManager.GetLogger("logerror");
#endregion private static readonly ILoggerRepository Repository = LogManager.GetRepository(Assembly.GetCallingAssembly());
private static readonly ILog Loginfo = LogManager.GetLogger(Repository.Name, "loginfo");
private static readonly ILog LogError = LogManager.GetLogger(Repository.Name, "logerror"); public static void Error(string errorMsg, Exception ex = null)
{
if (ex != null)
{
LogError.Error(errorMsg, ex);
}
else
{
LogError.Error(errorMsg);
}
} public static void Info(string msg)
{
Loginfo.Info(msg);
}
}
}

Log4Net.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--新增自定義節點:log4net type:解析類名,程式集名(log4net.dll)-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<appender name="Log4Net_INFO" type="log4net.Appender.RollingFileAppender">
<!--定義檔案存放位置-->
<file value="Log\\LogInfo\\" />
<encoding value="utf-8" />
<!--是否追加到檔案,預設為true,通常無需設定-->
<appendToFile value="true"/>
<RollingStyle value="Date"/>
<!--日期的格式,每天換一個檔案記錄,如不設定則永遠只記錄一天的日誌,需設定-->
<DatePattern value="&quot;log&quot;yyyyMM&quot;.log&quot;" />
<!--日誌檔名是否為靜態-->
<StaticLogFileName value="false"/>
<!--多執行緒時採用最小鎖定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--佈局(向用戶顯示最後經過格式化的輸出資訊)-->
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="記錄時間:%date %n錯誤描述:%message%newline %n" />
</layout>
</appender> <appender name="Log4Net_ERROR" type="log4net.Appender.RollingFileAppender">
<!--定義檔案存放位置-->
<file value="Log\\LogError\\" />
<encoding value="utf-8" />
<!--是否追加到檔案,預設為true,通常無需設定-->
<appendToFile value="true"/>
<RollingStyle value="Date"/>
<!--日期的格式,每天換一個檔案記錄,如不設定則永遠只記錄一天的日誌,需設定-->
<DatePattern value="&quot;log&quot;yyyyMM&quot;.log&quot;" />
<!--日誌檔名是否為靜態-->
<StaticLogFileName value="false"/>
<!--多執行緒時採用最小鎖定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--佈局(向用戶顯示最後經過格式化的輸出資訊)-->
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="記錄時間:%date %n錯誤描述:%message%newline %n" />
</layout>
</appender> <logger name="logerror">
<level value="ERROR" />
<appender-ref ref="Log4Net_ERROR" />
</logger>
<logger name="loginfo">
<level value="INFO" />
<appender-ref ref="Log4Net_INFO" />
</logger> </log4net>
</configuration>

這裡因為不同訊息放在不同檔案 分類處理用的“ogger name="logerror" 此種屬性.

ps:在LogHelper.cs檔案中用[assembly: XmlConfigurator(ConfigFile = @"LogConfig\Log4Net.config", Watch = true)]來讀取配置檔案,也可以在Startup.cs中註冊檔案路徑.不過為了獨立性 方便移植到別的專案中就沒用此方法.