在上一篇Log4net入門(ASP.NET MVC 5篇)中,我們講述了如何在ASP.NET MVC 5項目中使用log4net。在這一篇中,我們將講述如何在WCF應用中使用log4net,為了講述這個過程,我們將創建三個項目:WCF服務庫項目、WCF服務應用程序和客戶端應用程序。WCF服務庫項目主要用於編寫我們的WCF契約及服務,WCF服務應用程序主要用於將我們的WCF服務庫托管到IIS上,客戶端應用程序主要目的就是調用我們托管到IIS上的WCF服務。
一、項目創建
1、空白解決方案的創建:啟動VS2015,依次點擊【文件】-【新建】-【項目】,在“新建項目”對話框中,展開“其他項目類型”節點,選中“Visual Studio”解決方案,我們創建一個名為“Log4netWCF”的空白解決方案。
2、WCF服務庫項目的創建:右擊在第一步創建的“Log4netWCF”解決方案,依次點擊【添加】-【新建】項目,在“添加新項目”對話框中,我們選中“WCF”節點,在右側我們選擇“WCF服務庫”項目,將該項目命名為“Log4netWCFServiceLibrary”,然後點擊“確定”按鈕,這樣一個最簡單的WCF服務就創建好了,裡面的IService1.cs是服務契約,Service1是該契約的實現,這個是微軟自帶的演示代碼,為了簡單起見,我們不做任何改動,直接使用這個最簡單的服務。
3、WCF服務應用程序的創建:右擊在第一步創建的“Log4netWCF”解決方案,依次點擊【添加】-【新建】項目,在“新建項目”對話框中,我們選中“WCF”節點,在右側我們選擇“WCF服務應用程序”項目,將該項目命名為“Log4netWCFService”,然後點擊“確定”按鈕,完成WCF服務應用程序的創建。
4、在新創建的“Log4netWCFService”項目中,我們右擊“IService1.cs”文件,選擇將其刪除。然後展開Service1.svc,右擊“Service1.svc.cs”,選擇將其刪除。
5、右擊“Log4netWCFService”項目的“引用”節點,選擇【添加引用】選項,在彈出的“引用管理器”對話框中,展開“項目”節點,選中“解決方案”節點,在右側勾選“Log4netWCFServiceLibrary”,然後點擊“確定”按鈕。這樣我們就在“Log4netWCFService”服務應用程序項目中添加了對“Log4netWCFServiceLibrary”服務庫的引用。
6、雙擊打開“Log4netWCFService”項目中的Service1.svc文件,將其中的代碼修改為以下代碼:
1 <%@ ServiceHost Language="C#" Debug="true" Service="Log4netWCFServiceLibrary.Service1" CodeBehind="Service1.cs" %>
7、右擊“Log4netWCF”解決方案,點擊【生成解決方案】選項,編譯整個解決方案,如果沒有錯誤,繼續下面的操作。
8、右擊“Log4netWCFService”項目,點擊【發布】選項,彈出“發布Web”對話框,如下所示:
9、選擇“自定義”選項,然後輸入配置文件名稱為“Log4netWCF”,這個名稱可以隨便取,好記即可。然後點擊“確定”按鈕,進入下一步,如下圖所示:
10、在“Publish method:”中選擇“File System”,入下圖所示:
11、點擊“Target location:”後面的“...”按鈕,彈出“目標位置”對話框,在該對話框中點擊“本地IIS”按鈕,如下圖所示:
12、在上圖中,點擊“IIS網站”下面的“Default Web Site”,然後點擊右上角的“創建新Web應用程序”按鈕,如下圖所示:
13、輸入應用程序名稱為“Log4netWCF”,如下圖所示:
14、點擊“打開”按鈕,返回到“發布Web”對話框,然後點擊“下一步”按鈕。在“設置”標簽頁中,展開“File Publish Options”,然後勾選“Delete all existing files prior to publish”和“Precompile during publishing”,如下圖所示:
15、點擊“下一步”按鈕,然後再點擊“發布”按鈕,等待發布成功提示信息即可。
16、打開控制面板,依次點擊【系統和安全】-【管理工具】,然後以管理員身份運行“Internet信息服務(IIS)管理器”,在打開的“Internet信息服務(IIS)管理器”窗口中展開“Default Web Site”節點,然後選擇“Log4netWCF”應用程序,在右側下方點擊“內容視圖”,然後右鍵單擊“Service1.svc”文件,選擇【浏覽】選項,如果WCF服務沒有錯誤,則會出現如下頁面:
注意:上圖中的服務地址:http://localhost/Log4netWCF/Service1.svc,我們會在客戶端程序中添加服務引用的時候用到。
17、客戶端應用程序的創建:為方便起見,我們將客戶端應用程序創建為一個控制台應用程序,右擊第一步創建的“Log4netWCF”解決方案,依次點擊【添加】-【新建項目】選項,在彈出的“添加新項目”對話框中選擇“控制台應用程序”,並將其命名為Client,然後點擊“確定”按鈕。
18、在新創建的“Client”項目中,右擊“引用”節點,然後點擊【添加服務引用】選項,在彈出的“添加服務引用”對話框中的地址欄中,輸入在第16步生成的服務地址:http://localhost/Log4netWCF/Service1.svc,然後點擊“轉到”按鈕,修改命名空間為“Log4netWCF”,如下圖所示:
19、點擊“確定”按鈕,完成對WCF服務的引用。
20、雙擊打開“Client”項目中的“Program.cs”文件,修改代碼如下所示:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Client 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Log4netWCF.Service1Client proxy = new Log4netWCF.Service1Client(); 14 proxy.Open(); 15 string returnString = proxy.GetData(7); 16 proxy.Close(); 17 18 Console.WriteLine(returnString); 19 Console.ReadKey(); 20 } 21 } 22 }
21、將“Client”項目設置為啟動項目,然後運行程序,如果沒有任何錯誤,會出現如下結果頁面:
到這為止,我們的WCF應用程序全部創建完畢,下一步我們將在WCF應用程序中添加對log4net的使用。
二、在WCF應用程序中配置log4net
1、點擊VS工具欄中的【工具】-【NuGet包管理器】-【管理解決方案的NuGet程序包】,在打開的“NuGet - 解決方案”標簽頁中,點擊“浏覽”標簽,然後在搜索框中輸入“log4net”,選擇搜索結果中的“log4net”,然後勾選右側的“Log4netWCFServiceLibrary”,選擇最新穩定版本,然後點擊“安裝按鈕”,如下圖所示:
2、安裝log4net之後,點擊“Log4netWCFServiceLibrary”項目中的Properties節點,然後雙擊打開“AssemblyInfo.cs”文件,在該文件最後添加以下一行代碼:
1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
3、雙擊打開“Log4netWCFServiceLibrary”項目中的“Service1.cs”,修改代碼如下所示:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.Serialization; 5 using System.ServiceModel; 6 using System.Text; 7 8 namespace Log4netWCFServiceLibrary 9 { 10 // 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的類名“Service1”。 11 public class Service1 : IService1 12 { 13 private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 14 15 public string GetData(int value) 16 { 17 log.Debug("debug!"); 18 log.Info("info!"); 19 log.Warn("warn!"); 20 log.Error("error!"); 21 log.Fatal("fatal!"); 22 23 return string.Format("You entered: {0}", value); 24 } 25 26 public CompositeType GetDataUsingDataContract(CompositeType composite) 27 { 28 if (composite == null) 29 { 30 throw new ArgumentNullException("composite"); 31 } 32 if (composite.BoolValue) 33 { 34 composite.StringValue += "Suffix"; 35 } 36 return composite; 37 } 38 } 39 }
4、在“Log4netWCFService”項目中添加一個名為“Log4net.config”的配置文件,我們在其中配置按日期切分日志文件,並且將日期作為日志文件名稱的一部分,具體配置文件如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 5 </configSections> 6 7 <system.web> 8 <compilation debug="true" targetFramework="4.5.2" /> 9 <httpRuntime targetFramework="4.5.2" /> 10 </system.web> 11 12 <log4net> 13 <!-- 將日志以回滾文件的形式寫到文件中 --> 14 <!-- 按日期切分日志文件,並將日期作為日志文件的名字 --> 15 <appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender"> 16 <!-- 日志文件存放位置,可以為絕對路徑也可以為相對路徑 --> 17 <file value="C:\Logs\" /> 18 <!-- 將日志信息追加到已有的日志文件中--> 19 <appendToFile value="true" /> 20 <!-- 最小鎖定模式,以允許多個進程可以寫入同一個文件 --> 21 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 22 <!-- 指定按日期切分日志文件 --> 23 <rollingStyle value="Date" /> 24 <!-- 日志文件的命名規則 --> 25 <datePattern value=""WCFLogs_"yyyyMMdd".log"" /> 26 <!-- 當將日期作為日志文件的名字時,必須將staticLogFileName的值設置為false --> 27 <staticLogFileName value="false" /> 28 29 <layout type="log4net.Layout.PatternLayout"> 30 <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 31 </layout> 32 </appender> 33 34 <root> 35 <!-- 控制級別,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --> 36 <!-- 比如定義級別為INFO,則INFO級別向下的級別,比如DEBUG日志將不會被記錄 --> 37 <!-- 如果沒有定義LEVEL的值,則缺省為DEBUG --> 38 <level value="ALL" /> 39 <!-- 按日期切分日志文件,並將日期作為日志文件的名字 --> 40 <appender-ref ref="RollingFileAppenderNameByDate" /> 41 </root> 42 </log4net> 43 </configuration>
5、重新發布“Log4netWCFService”項目到IIS上,重新發布時只需點擊【發布】菜單,然後點擊“發布”按鈕即可。
6、運行“Client”控制台應用程序,運行完畢後,我們就可以在C:\Logs\目錄下看到名為“WCFLogs_20161215.log”的日志文件,有可能日期不一樣。
至此,如何在WCF應用中使用log4net就講到這兒,祝大家順利實現!
源碼下載