打造適合你的ABP(1)---- 完善日志系統


 

最近使用Abp開發了一個項目,對abp有一個大概的了解,第一個小項目接近尾聲,新的項目馬上開始,針對開發第一個項目中發現的問題及不方便的地方,本人做一些修改,特此記錄,請大家多多指正!

本人的開發環境vs2017 ,vs code,使用abp版本為abp3.5 + angular開發,安裝過程就免了,另外本人使用的aspnetzero。請大家自覺支持正版,技術支持很給力。
首先,完善下Abp的日志,apb 的日志系統使用Castle Windsor的日志記錄工具,它可以和不同的logginh(日志)類庫協作:Log4Net、NLog、Serilog等。Castle為所有Logger庫提供一個公共接口,所以它獨立於logging庫,也可以在有需要的時候很容易地替換logging。

ABP模板 默認采用采用Log4Net,進行了簡單的配置,主要是文件日志,查看下log4net的配置方法,嘗試了其他的配置,例如數據庫等,有些可以成功,有些不行:

 1   <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
 2     <file type="log4net.Util.PatternString" value="App_Data/Logs/Log.txt"/>
 3     <appendToFile value="true" />
 4     <rollingStyle value="Size" />
 5     <maxSizeRollBackups value="10" />
 6     <maximumFileSize value="10000KB" />
 7     <staticLogFileName value="true" />
 8     <layout type="log4net.Layout.PatternLayout">
 9       <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
10     </layout>
11   </appender>

abp默認不在控制台輸出日志內容,因此有時候錯誤沒辦法找,必須打開日志文件(App_Data/Logs/Log.txt)查找最新的錯誤,這個有點低端,每次打開文本效率有點低,不符合我一貫能裝的性格,有沒有其他查看日志的方法:web signalr方式,我能想到的大神們估計都想到了,我這里配置了兩個能裝逼的:log2consoleexceptionless;完成這個瞬間牛逼了許多。

先說第一個問題,abp日志配置有個問題就是有的配置節點中的layout type不能采用其他格式,主要是xml格式的貌似不支持;

xml配置方式是log2console的默認配置方式

1 <appender name="FileAppender" type="log4net.Appender.FileAppender">
2     <file value="log-file.txt" />
3     <appendToFile value="true" />
4     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
5     <layout type="log4net.Layout.XmlLayoutSchemaLog4j" />
6 </appender>

這個配置在abp中是沒效果的,是不是我漏掉什么了,大神們給個提示,非常感謝!

exceptionless也是這樣,無敵了,叔可忍嬸不可忍!

1、log2console

修改log2console源碼,添加一個receiver,要做的很簡單,復制原來的udp receiver,修改解析方法,首先做一個PatternLayout:

1     <layout type="log4net.Layout.PatternLayout">
2       <conversionPattern value='{"date":"%date","thread":"%-5.5thread","level":"%-5level","logger":"%-40.40logger"} %message' />
3     </layout>

這個很簡單,就是把消息包裝成json字符串加上message。

在log2console,Log2Console.Receiver.ReceiverUtils類中添加解析函數:

 1         public static LogMessage ParsePatternLayoutLogEvent(string logEvent, string defaultLogger)
 2         {
 3             var logMsg = new LogMessage();
 4             var sl = logEvent.Split('}');
 5             if (sl.Length < 2)
 6                 logMsg.Message = logEvent;
 7             else
 8             {
 9                 var jo = Newtonsoft.Json.JsonConvert.DeserializeObject<msgObj>(sl[0]  + "}");
10                 logMsg.TimeStamp = DateTime.Parse(jo.date.Trim().Replace(',','.'));
11                 logMsg.Level = LogLevels.Instance[jo.level.Trim()];
12                 logMsg.LoggerName = jo.logger.Trim();
13                 logMsg.ThreadName = jo.thread.Trim();
14                 logMsg.Message = sl[1];
15             }
16             return logMsg;
17 
18         }

在receiver中添加新的解析類UdpPatternLayoutReceiver,簡單復制udpReceiver,修改幾行代碼即可,start函數中,修改解析方法:

                    LogMessage logMsg = ReceiverUtils.ParsePatternLayoutLogEvent(loggingEvent, "UdpLogger");

另外修改SampleClientConfig,可以給用戶提供個配置提示。

編譯生成log2console。

最終生成的log2console界面。

最后一步,在abp項目中添加udp配置:

 1   <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
 2     <param name="Encoding" value="utf-8" />
 3     <remoteAddress value="10.1.12.188" />
 4     <remotePort value="7071" />
 5     <layout type="log4net.Layout.PatternLayout">
 6       <conversionPattern value='{"date":"%date","thread":"%-5.5thread","level":"%-5level","logger":"%-40.40logger"} %message' />
 7     </layout>
 8   </appender>
 9 
10 
11 
12   <root>
13   
14 ........
15     <appender-ref ref="UdpAppender" />
16     <level value="ALL" />
17   </root>

現在,解決了看日志的問題了。

 2、exceptionless配置

 解決了看日志的問題保存日志的問題還是保存在文件里,查看歷史不方便,exceptionless很好。

exceptionless的安裝按照官方說明安裝即可,我是在iis上安裝的,安裝過程中要注意兩點,一是版本es版本要按照說明的版本安裝,最新版本不支持。二是,es安裝完成后,折騰了好長時間,我安裝了head這個插件,進行配置沒問題了,覺得安裝過程中主要是配置了這個參數:

action.auto_creat_index:true  但沒有測試不安裝head插件僅配置這個參數是否可用。

es的head插件安裝成功界面。

安裝完成打開exceptionless,注冊一個賬號后,配置exceptionless,不允許新用戶注冊即可:

webconfig中添加或修改:<add key="EnableAccountCreation" value="true" />

exceptionless 安裝成功。

配置abp中log 的exceptionless:

  <appender name="exceptionless" type="Exceptionless.Log4net.ExceptionlessAppender,Exceptionless.Log4net">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline"/>
    </layout>
  </appender>




  <root>
//其他配置
    <appender-ref ref="exceptionless" />
    <level value="ALL" />
  </root>

 

安裝nuget exceptionless的包:exceptionless.aspnetcore

在app.config中配置: 

 "Exceptionless": {
    "ApiKey": "你的apkkey",
    "ServerUrl": "http://你的地址",
    "DefaultData": {
      "JSON_OBJECT": "{ \"Name\": \"Blake\" }",
      "Boolean": true,
      "Number": 1,
      "Array": "1,2,3"
    },
    "DefaultTags": [ "xplat" ],
    "Settings": {
      "FeatureXYZEnabled": false
    }
  },

 

最后在host項目的startup的Configure函數中添加:app.UseExceptionless(_appConfiguration);

后續主要有這些方面的完善,敬請期待:

 

大功告成,謝謝你的打賞!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM