前段時間想要實現這個功能網上找了很多資料,現在整理一下發布出來,希望給大家一點幫助。 首先是依賴項的選擇:
關於NLog版本不是最新是因為最新版本有點問題我試了試不支持,所以選了這幾個版本,MySql的版本是因為Nlog的配置默認是不支持MySql直連的。這是准備工作。
然后是Nlog.config的配置:
<target xsi:type="Null" name="blackhole" />
<target xsi:type="Database" name="database" dbProvider="MySql.Data.MySqlClient.MySqlConnection,Mysql.Data" connectionstring="server=;user id=;password=;Database=testing;" commandText="insert into access_log(app_key,access_ip,access_time,msg) values (@app_key,@access_ip,@access_time,@msg)" >
<parameter name="app_key" layout="${event-context:item=app_key}" />
<parameter name="access_ip" layout="${event-context:item=access_ip}" />
<parameter name="access_time" layout="${event-context:item=access_time}" />
<parameter name="msg" layout="${event-context:item=msg}" />
</target>
這個parameter的屬性是選擇性上次必要的,Log日志內容需要自己定義格式和它一樣就可以了,不需要的日志他是不會記錄的
<rules>
<logger name="*" writeTo="database"/>
</rules>
這是規則。
//LogEventInfo ei = new LogEventInfo();
//ei.Level = LogLevel.Info;
//ei.Properties["app_key"] = param["appKey"].ToString();
//ei.Properties["access_ip"] = accessIp;
//ei.Properties["access_time"] =accessDate;
//ei.Properties["msg"] = log;
//_logger.Log(ei);
這是日志格式。其他問題其實網上都有解答,最主要的問題就是dbProvider屬性是不能直接寫MySql的。
有什么不足和建議可以和我提,共同進步!