1. 程式人生 > >使用LogMaster4Net實現應用程式日誌的集中管理

使用LogMaster4Net實現應用程式日誌的集中管理

日誌在軟體系統中的重要性我在此也不贅述了,幾乎所有程式設計師每天都會更日誌打交道。 那麼你是否曾今為這樣的一些事情而困擾過:

- 遠端登入到不同的伺服器,找到應用程式目然後檢視應用日誌;
- 來回切換於不同伺服器並使用tail來實時監控日誌輸出資訊;
- 解決在各個伺服器上各個應用日積月累生成的大量日誌檔案造成的磁碟空間不足的問題;

如果在你的系統中存在著很多個不同的程序並且執行在多個伺服器上,上面的問題將會顯得尤為突出。很不幸是,筆者所在的公司的系統中,有數十個windows服務,控制檯程式,計劃任務同時工作在多個伺服器上。 因此,筆者不勝其擾,終於開始尋找日誌集中管理的解決方案。 幸運的是,一款開源的日誌伺服器軟體 

LogMaster4Net 剛好滿足需求,而且正好支援筆者公司系統採用的日誌元件log4net。 經過一段時間的使用,LogMaster4Net已在筆者公司穩定運行了超過半年時間。 筆者公司的日誌從此規整,監控系統執行情況也比以前方便很多,查詢系統執行問題也更迅速。

下面介紹一下LogMaster4Net的使用方法:

下載安裝

配置埠: 開啟根目錄配置檔案(SuperSocket.SocketService.exe.config)設定埠號(預設為2020)

<server name="LogMasterServer"
        ...
        port="[port]"
... </server>

安裝Windows服務: 命令列執行如下指令,安裝成功後,如發現服務未啟動請在服務列表裡找到服務LogMaster4NetService並啟動

SuperSocket.SocketService.exe -i

將應用程式的log4net配置檔案複製到LogMaster4Net目錄

LogMaster4Net可直接使用應用的日誌配置檔案。應用日誌如有檔案生成,請注意檔案儲存路徑。 應用配置檔案應存放於LogMaster4Net的Config資料夾, 相對路徑如下:

\Config\log4net.[LogAppName].Config

[LogAppName] 為應用在LogMaster4Net中的唯一名稱,將會在後面設定中使用。

如果 [LogAppName] 為 "QueryApp", 那麼此應用的日誌配置檔名為:

\Config\log4net.QueryApp.Config

此應用的日誌配置內容可為:  

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
        </filter>
        <file value="AppLogs\SampleApp\info.log" />
        <encoding value="utf-8"/>
        <preserveLogFileNameExtension value="true" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="yyyyMMdd" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="infoAppender" />
    </root>
</log4net>

應用程式日誌轉發設定

使用log4net的UdpAppender轉發日誌:  

<appender name="udpAppender" type="log4net.Appender.UdpAppender">
  <remoteAddress value="[ServerAddress]" />
  <remotePort value="[port]" />
  <layout type="log4net.Layout.XmlLayout">
      <locationInfo value="true" />
  </layout>
</appender>
  • [ServerAddress]: LogMaster4Net服務安裝執行的地址
  • [Port]: LogMaster4Net服務監聽的埠號;

設定日誌全域性變數"LogAppName":

log4net.GlobalContext.Properties["LogAppName"] = "QueryApp";

此處LogAppName即為上步所述應用在LogMaster4Net中的唯一名稱"QueryApp"。

完成上述步驟之後,編譯執行應用程式,日誌便會轉發到LogMaster4Net上並按照應用的日誌的配置進行處理。

LogMaster4Net的優勢與缺點

優勢如下:

  • 簡單: 直接使用現有日誌元件的特性,無需額外開發;
  • 透明: 仍使用原應用的配置進行處理,如同在應用本地處理日誌一樣;
  • 靈活: 靈活的配置策略: 基於SuperSocket的配置允許LogMaster4Net監聽多個IP和埠,甚至能允許你執行多個LogMaster4Net伺服器例項;

缺點:

  • 缺乏相應的日誌輔助工具,如dashboard, archive; 如需更多高階功能,需要配合其它工具使用;

展望

當今軟體江湖,雲端計算(PaaS),應用容器(Docker), 微服務等技術(概念)越來越應用廣泛。為了追求更好的可靠性,穩定性,易維護性,將來會有更多的系統是以多程序,多例項的方式執行。如此一來,作為軟體系統中的基礎部件,日誌的集中管理將會是一個公共話題。 相關的最佳實踐,開源專案也將不斷湧現。

傳說中的Splunk很好很強大,但是不便宜。 不是所有公司(中國公司)願意在日誌上投入那麼多錢。 LogMaster4Net作為其中一個開源軟體只是完成了一小步,但對於一些要求不高,技術實力有限的中小IT企業也已經足夠。不過還好,LogMaster4Net推出的時間很短,是一個十分年輕的開源專案,如果大家對它有啥建議,不妨直接聯絡其作者。相信LogMaster4Net在未來的幾年裡會有不錯的發展。