Log4net入門(WCF篇)

来源:http://www.cnblogs.com/yonghuacui/archive/2016/12/15/6181864.html
-Advertisement-
Play Games

在上一篇Log4net入門(ASP.NET MVC 5篇)中,我們講述瞭如何在ASP.NET MVC 5項目中使用log4net。在這一篇中,我們將講述如何在WCF應用中使用log4net,為了講述這個過程,我們將創建三個項目:WCF服務庫項目、WCF服務應用程式和客戶端應用程式。WCF服務庫項目主 ...


  在上一篇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="&quot;WCFLogs_&quot;yyyyMMdd&quot;.log&quot;" />
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就講到這兒,祝大家順利實現!

  源碼下載


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Autofac在提供之前那些方法的時候, 同時提供了五個事件, 這一篇就看一下這幾個事件. 一、五大事件 看一下結果: 額, 首先我得說明一下, 輸出的順序和我寫事件的順序是沒有關係的, 不是說, 我事件寫在前面, 輸出就在前面. 從這張圖上, 能看到, 對象創建時, 構造函數的調用時在中間的. 其 ...
  • 具體方法: 控制台輸出:Console.WriteLine(Days()); //輸出結果: //演算法原理: //第一個元素加1天和第二個元素比較,日期不同的話, 直接跳出迴圈,從下一個元素繼續對比 //第一個元素加1天與第二個元素比較,如果日期相同則最大連續天數加1,然後第二個元素加1天與第三個元 ...
  • 在前幾篇Log4net入門文件的講述過程中,我們在使用log4net的類中都要編寫如下一行代碼: 1 private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurr ...
  • 在實際的項目開發中,我們經常需要使用到文件的I/O操作,主要包含對文件的增改刪查等操作,這些基本的操作我們都是很熟悉,但是較少的人去考慮文件的安全和操作的管理等方面,例如文件的訪問許可權管理,文件數據的徹底刪除和數據的恢復等等,這一系列的操作需要我們對.NET的相關知識有一個深刻的學習。 在本文章主要 ...
  • 前言 說起來慚愧,學了大半年的C#,其實最開始就接觸到了封裝的部分,但是一直模模糊糊的弄不清楚,也覺得沒什麼影響就沒怎麼在意,現在才開始認真的看這部分內容,看懂了過後好多東西清晰了不少,才發現封裝這個基礎那麼那麼重要。 現在反過來一想,封裝和類這些其實就是當初最開始學習面向對象編程的時候老師教的定義 ...
  • 需求是這樣,有個程式界面我們需要通過自己的程式持續輸入數據,界面如圖。 可以獲得控制項的句柄而用鉤子寫入值。這裡需要用到spy++工具。在VS的工具下有個spy++工具,打開如下圖 通過這個工具可以獲得窗體的句柄,當然這裡獲得的句柄只能用於測試,因為.net開發的程式窗體每次打開句柄都會變,都需要重新 ...
  • 開放中經常會要做單元測試,新的項目又沒有單元測試項目,怎麼才能搭建一個單元測試項目呢? 下麵跟我四步走,如有錯誤之處,還請指正! 1、添加項目 2、添加配置文件 新建app.config文件,註意不是web.config,添加connectionstring 3、設置文件屬性 Bulid Actio ...
  • 通過程式集掃描, 能夠自動註冊符合規則的類型. 這種方式, 很方便. 這一篇就介紹下程式集掃描吧. 一、掃描 其實前面已經介紹過, 這種方式. 不過並不全. 先看一個之前的方式: 二、過濾 如果我並不想註冊那麼多的類型, 但是又想通過程式集的註冊方式去註冊, 那怎麼辦呢? 1. Where過濾 只需 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...