インストール
Nugetでインストールする。
PM> Install-Package NLog.Config
インストールするとプロジェクトフォルダ配下にconfigファイルが配置される。
ログ出力
class Program { private static Logger logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { logger.Trace("trace"); logger.Debug("debug"); logger.Info("info"); logger.Warn("error"); logger.Fatal("fatal"); } }
"Fluent Interface"形式でも書ける(こっちの書き方の方が各要素が見やすくて好き)
using NLog.Fluent; class Program { private static Logger logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { logger.Debug() .Message("debug") .Property("a", "a") .Property("b", "b") .Write(); } }
とりあえずファイル出力する用のConfig
<nlog 省略> <targets> <target name="fileTarget" xsi:type="File" layout="${longdate} [${threadid:padding=8}] [${uppercase:${level:padding=-5}}] ${callsite}() ${message} ${exception:format=tostring}" fileName="${basedir}/logs/${date:format=yyyyMMdd}.log" encoding="UTF-8" archiveFileName="${basedir}/logs/archive.{#}.log" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="30" /> </targets> <rules> <logger name="fileLogger" minlevel="Trace" writeTo="fileTarget" /> </rules> </nlog>
ここまではとりあえずログ出力できればいいやの話。
NLogの構成
ほかにも要素あるけど主要な要素だけの簡単な構成を図示してみた。 とりあえず使うだけならこの4つ押さえておけばOK
- Logger
- ロガー
- Target
- ログ出力先、NLogにはMailやEventLogなど色々な出力先が提供されている。
https://github.com/nlog/nlog/wiki/Targets
- ログ出力先、NLogにはMailやEventLogなど色々な出力先が提供されている。
- Layout
- LayoutRender
- ログ出力レイアウトの中に組み込めるマクロみたいなもの。他にもたくさんある(以下リンク参照)
https://github.com/nlog/nlog/wiki/Layout-Renderers
- ログ出力レイアウトの中に組み込めるマクロみたいなもの。他にもたくさんある(以下リンク参照)
JSON形式でログ出力する
JsonLayoutを使用する。NLog.Configに以下を記述。
<target name="jsonFile" xsi:type="File" fileName="log.json"> <layout xsi:type="JsonLayout"> <attribute name="time" layout="${longdate}" /> <attribute name="level" layout="${level:upperCase=true}"/> <attribute name="message" layout="${message}" /> </layout> </target>
独自のプロパティを出力する
Propertyメソッドで指定。
logger.Debug() .Message("debug") .Property("PropertyAAA", "prop-value") .Write();
NLog.configでは以下のLayoutRenderを使う。
${event-properties:item=PropertyAAA}
複数のプロパティを一気に出力したい場合
logger.Debug() .Message("debug") .Property("PropertyAAA", "prop-value") .Property("PropertyBBB", "prop-value") .Property("PropertyCCC", "prop-value") .Write();
NLog.config
${all-event-properties}
独自のTarget作る
- TargetWithLayoutを継承したクラスをNLog.Targets内に作成する。
- Target名称をTargetAttributeで指定
- Writeメソッドをオーバーライドして出力処理を記述する。
namespace NLog.Targets { [Target("MyTarget")] public class MyTarget : TargetWithLayout { protected override void Write(LogEventInfo logEvent) { // logEvent.Message } } }
NLog.Config
- extensionsに独自Targetが入ったアセンブリ名を指定する。
<nlog> <extensions> <add assembly="MyAssembly"/> </extensions> </nlog>
他のTargetのように使う。
<target name="myTarget" xsi:type="MyTarget">
NLog.config内で動的な項目を使う
NLog.configでプログラムから設定した値を使いたい場合
GlobalDiagnosticsContext.Set("myVariable","someValue");
NLog.config
${gdc:item=myVariable}