Winform配置了Log4net 但是總是不能輸出,是log4net.config配置文件訪問路徑出錯了。
就是程序在運行時候沒把log4net.config 配置文件複製到Debug文件夾下,導致log4net訪問不到配置文件,所以沒有log輸出。
C# winform 正確配置log4net.
1、項目結構:
2、log4net.config 文件:
<?xml version="1.0" encoding="utf-8" ?> <log4net> <!--根配置--> <root> <!--日誌級別:可選值: ERROR > WARN > INFO > DEBUG --> <level value="ERROR"/> <level value="WARN"/> <level value="INFO"/> <level value="DEBUG"/> <appender-ref ref="ErrorLog" /> <appender-ref ref="WarnLog" /> <appender-ref ref="InfoLog" /> <appender-ref ref="DebugLog" /> </root> <!-- 錯誤 Error.log--> <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"> <!--目錄路徑,可以是相對路徑或絕對路徑--> <param name="File" value="log"/> <!--文件名,按日期生成文件夾--> <param name="DatePattern" value="/yyyy-MM-dd/"Error.log""/> <!--追加到文件--> <appendToFile value="true"/> <!--創建日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--寫到一個文件--> <staticLogFileName value="false"/> <!--單個文件大小。單位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件數,設爲"-1"則不限--> <maxSizeRollBackups value="-1"/> <!--日誌格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %message %n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- 警告 Warn.log--> <appender name="WarnLog" type="log4net.Appender.RollingFileAppender"> <!--目錄路徑,可以是相對路徑或絕對路徑--> <param name="File" value="log"/> <!--文件名,按日期生成文件夾--> <param name="DatePattern" value="/yyyy-MM-dd/"Warn.log""/> <!--追加到文件--> <appendToFile value="true"/> <!--創建日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--寫到一個文件--> <staticLogFileName value="false"/> <!--單個文件大小。單位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件數,設爲"-1"則不限--> <maxSizeRollBackups value="-1"/> <!--日誌格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %message %n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="WARN" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <!-- 信息 Info.log--> <appender name="InfoLog" type="log4net.Appender.RollingFileAppender"> <!--目錄路徑,可以是相對路徑或絕對路徑--> <param name="File" value="log"/> <!--文件名,按日期生成文件夾--> <param name="DatePattern" value="/yyyy-MM-dd/"Info.log""/> <!--追加到文件--> <appendToFile value="true"/> <!--創建日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--寫到一個文件--> <staticLogFileName value="false"/> <!--單個文件大小。單位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件數,設爲"-1"則不限--> <maxSizeRollBackups value="-1"/> <!--日誌格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %message %n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!-- 調試 Debug.log--> <appender name="DebugLog" type="log4net.Appender.RollingFileAppender"> <!--目錄路徑,可以是相對路徑或絕對路徑--> <param name="File" value="log"/> <!--文件名,按日期生成文件夾--> <param name="DatePattern" value="/yyyy-MM-dd/"Debug.log""/> <!--追加到文件--> <appendToFile value="true"/> <!--創建日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value="Composite"/> <!--寫到一個文件--> <staticLogFileName value="false"/> <!--單個文件大小。單位:KB|MB|GB--> <maximumFileSize value="200MB"/> <!--最多保留的文件數,設爲"-1"則不限--> <maxSizeRollBackups value="-1"/> <!--日誌格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %message %n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> </appender> </log4net>
3、安裝log4net
1)使用如下命令:
Install-Package log4net
2)方法二:
4、設置log4net.config屬性,右擊log4net.config,然後選擇屬性,如下:
5、創建AppLog工具類
using System; using System.Collections.Generic; using System.Text; using log4net; using log4net.Config; using System.IO; namespace Common { /// <summary> /// 使用Log4net插件的log日誌對象 /// </summary> public static class AppLog { private static ILog log; static AppLog() { string baseDirectory = AppDomain.CurrentDomain.BaseDirectory; string path = Path.Combine(baseDirectory, "XmlConfig/log4net.config"); XmlConfigurator.ConfigureAndWatch(new FileInfo(path)); log = LogManager.GetLogger(typeof(AppLog)); } public static void Debug(object message) { log.Debug(message); } public static void DebugFormatted(string format, params object[] args) { log.DebugFormat(format, args); } public static void Info(object message) { log.Info(message); } public static void InfoFormatted(string format, params object[] args) { log.InfoFormat(format, args); } public static void Warn(object message) { log.Warn(message); } public static void Warn(object message, Exception exception) { log.Warn(message, exception); } public static void WarnFormatted(string format, params object[] args) { log.WarnFormat(format, args); } public static void Error(object message) { log.Error(message); } public static void Error(object message, Exception exception) { log.Error(message, exception); } public static void ErrorFormatted(string format, params object[] args) { log.ErrorFormat(format, args); } public static void Fatal(object message) { log.Fatal(message); } public static void Fatal(object message, Exception exception) { log.Fatal(message, exception); } public static void FatalFormatted(string format, params object[] args) { log.FatalFormat(format, args); } } }
6、調用方法:
AppLog.Debug($"test={test}");
效果如下: