自己有幾個自己的小項目,有許多公用的方法/擴展/工具類等等,於是封裝了一些常用的工具類/擴展方法做了一個類庫 WeihanLi.Common,日誌使用了自己比較常用的 log4net,開始預設使用的log4net進行處理日誌,在1.0.12版本之前直接依賴 log4net,後來覺得這樣做不太好,一是... ...
log4net使用封裝,無縫切換 dotnet 和 dotnetcore
Intro
自己有幾個自己的小項目,有許多公用的方法/擴展/工具類等等,於是封裝了一些常用的工具類/擴展方法 WeihanLi.Common,日誌使用了自己比較常用的 log4net,開始預設使用的log4net進行處理日誌,在1.0.12版本之前直接依賴 log4net,後來覺得這樣做不太好,一是多了 log4net 這一依賴而且有點一個公共類庫依賴某一個具體的日誌框架有點不妥,後來決定把 log4net 給獨立出來,單獨遷移出來一個 WeihanLi.Common.Logging.Log4Net
本文主要介紹一下,怎麼通過 WeihanLi.Common.Logging.Log4Net 來使用 log4net,讓你在 .net core 應用中有著和 .net framework 一致的體驗
安裝
通過 Nuget 安裝 WeihanLi.Common.Logging.Log4Net
使用
log4net 初始化
Log4NetHelper.LogInit(); // 預設使用當前目錄的 log4net.config 作為配置文件 Log4NetHelper.LogInit(log4netConfigFilePath); // 手動指定 log4net 配置文件路徑
獲取 logger,GetLogger
var genericLogger = Log4NetHelper.GetLogger<ClassName>(); var typeLogger = Log4NetHelper.GetLogger(typeof(Program)); var logger = Log4NetHelper.GetLogger("LoggerName");
記錄日誌
logger.Debug(msg); logger.Info(msg); logger.Info(msg, exception); logger.Warn(msg); logger.Warn(msg, exception); logger.Error(msg); logger.Error(msg, exception); logger.Fatal(msg); logger.Fatal(msg, exception);
配置使用 ElasticsearchAppender
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="./Log/systemLog.%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<encoding value="unicodeFFFE" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data" />
<connectionString value="data source=.;initial catalog=WebLog;integrated security=false;persist security info=True;User ID=[***];Password=[***]" />
<commandText value="INSERT INTO [dbo].[TestLog]([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES(@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
<filter type="log4net.Filter.LevelRangeFilter">
<!--<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="ERROR" />-->
<param name="LevelMin" value="WARN" />
</filter>
</appender>
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="ERROR" />
<foreColor value="White" />
<backColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="DEBUG" />
<backColor value="Green" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<authentication value="Basic" />
<username value="[email protected]" />
<password value="*******" />
<to value="w***@outlook.com" />
<from value="[email protected]" />
<subject value="logging message test" />
<smtpHost value="smtp.126.com" />
<bufferSize value="512" />
<!-- 超長是否丟棄 -->
<lossy value="true" />
<!-- 下麵的定義, 就是 日誌級別 大於 ERROR 的, 才發郵件. -->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %date %newline [%thread] %newline %-5level %logger %newline - %message" />
</layout>
</appender>
<appender name="ElasticSearchAppender" type="WeihanLi.Common.Logging.Log4Net.ElasticSearchAppender, WeihanLi.Common.Logging.Log4Net">
<bufferSize value="2" />
<ElasticSearchUrl value="http://localhost:9200" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="TraceAppender" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingLogFileAppender" />
<!--
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="AdoNetAppender" />
<appender-ref ref="SmtpAppender" />
<appender-ref ref="ElasticSearchAppender" />
-->
</root>
</log4net>
</configuration>
Memo
如果有什麼問題或建議,歡迎提出