簡介
NLog是一個基于.NET平臺編寫的類庫,我們可以使用NLog在應用程序中添加極為完善的跟蹤調試代碼。 NLog是一個簡單靈活的.NET日志記錄類庫。通過使用NLog,我們可以在任何一種.NET語言中輸出帶有上下文的(contextual information)調試診斷信息,根據喜好配置其表現樣式之后發送到一個或多個輸出目標(target)中。
NLog的API非常類似于log4net,且配置方式非常簡單。NLog使用路由表(routing table)進行配置,但log4net卻使用層次性的appender配置,這樣就讓NLog的配置文件非常容易閱讀,并便于今后維護。 NLog遵從BSD license,即允許商業應用且完全開放源代碼。任何人都可以免費使用并對其進行測試,然后通過郵件列表反饋問題以及建議。
NLog支持.NET、C/C++以及COM interop API,因此我們的程序、組件、包括用C++/COM 編寫的遺留模塊都可以通過同一個路由引擎將信息發送至NLog中。
代碼實現
1、自定義變量
<variable?name="accessToken"?value="UKncvUQRoPWx8lCvwED105GoWYikIGrOPzGpJOMQMCB"?/><variable?name="notifyApiUrl"?value="http://localhost:8088/LogCollection"?/><variable?name="typesite"?value="YuanFeng.LegalDoc.Api"?/>
2、配置輸出
<target?type="WebService"?encoding="utf-8"?name="lineNotify"?url="${notifyApiUrl}"?protocol="HttpPost"><parameter?name="accessToken"?type="System.String"?layout="${accessToken}"?/><parameter?name="localip"?type="System.String"?layout="${local-ip}"?/><parameter?name="level"?type="System.String"?layout="${level}"?/><parameter?name="typesite"?type="System.String"?layout="${typesite}"?/><parameter?name="message"?type="System.String"?layout="YuanFeng.LegalDoc.Api?-?${local-ip}|${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message}?${exception:format=tostring}|url:?${aspnet-request-url}|action:?${aspnet-mvc-action}"?/></target>
3、新建log項目,接收日志
[HttpPost]public?bool?Post([FromForm]?Logarg?request){if?(request.accessToken?!=?"UKncvUQRoPWx8lCvwED105GoWYikIGrOPzGpJOMQMCB"){return?false;}if?(request.level?==?"Error")logger.LogError(request.message?+?"{localipstr}?{typesite}",?request.localip,?request.typesite);if?(request.level?==?"Info")logger.LogInformation(request.message?+?"{localipstr}?{typesite}",?request.localip,?request.typesite);return?true;}
4、輸出日志到文件
<?xml?version="1.0"?encoding="utf-8"??>
<nlog?xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd?NLog.xsd"autoReload="true"throwExceptions="false"internalLogLevel="Off"?internalLogFile="c:\temp\nlog-internal.log"><variable?name="myvar"?value="myvalue"?/><targets><target?xsi:type="File"?name="f"?fileName="${basedir}/logs/${event-properties:item=localipstr}/${event-properties:item=typesite}/${shortdate}/${level}.log"layout="${longdate}?${uppercase:${level}}?${message}"maxArchiveFiles="999"archiveAboveSize="10485760"?/></targets><rules><logger?name="*"?minlevel="Info"?writeTo="f"?/></rules>
</nlog>