2017-09-22 33 views
0

NLogを使用してJSONとしてファイルを書きたいと思います。私はそれがこのようにできることを認識しています。プログラムでNLogを使用してJSONとしてファイルを書き込む

<target name="jsonFile" xsi:type="File" fileName="${logFileNamePrefix}.json"> 
    <layout xsi:type="JsonLayout"> 
     <attribute name="time" layout="${longdate}" /> 
     <attribute name="level" layout="${level:upperCase=true}"/> 
     <attribute name="message" layout="${message}" /> 
    </layout> 
</target> 

しかし、私はC#コードでそれをしたいと思います。私はこれから始まりました:

var config = new LoggingConfiguration(); 

    var fileTarget = new FileTarget(); 
    string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments); 

    string fullPath = Path.Combine(folder, "mylog.json"); 
    fileTarget.FileName = fullPath; 

    config.AddTarget("file", fileTarget);   
    var fileRule = new LoggingRule("*", LogLevel.Error, fileTarget); 
    config.LoggingRules.Add(fileRule);   

    LogManager.Configuration = config; 

しかし、それはファイルとしてのみ書きますが、JSONは書きません。任意のヘルプまたはヒントが評価されます

答えて

1

あなたのレイアウトが不足しているように見えます。これは動作します

var fileTarget = new FileTarget() 
{ 
    Name = "JSonTarget", 
    FileName = @"C:\Temp\Json.txt" 
}; 

var JSLayout = new JsonLayout(); 
JSLayout.Attributes.Add(new JsonAttribute("time", "${longdate}")); 
JSLayout.Attributes.Add(new JsonAttribute("level", "${level:upperCase=true}")); 
JSLayout.Attributes.Add(new JsonAttribute("message", "${message}")); 

fileTarget.Layout = JSLayout; 

var JSonTargetRule = new LoggingRule("*", LogLevel.Trace, fileTarget); 

LogManager.Configuration.AddTarget("JSonTarget", fileTarget); 
LogManager.Configuration.LoggingRules.Add(JSonTargetRule); 

LogManager.ReconfigExistingLoggers(); 

var _logger = LogManager.GetCurrentClassLogger(); 

_logger.Info("JSON Informational Message"); 
_logger.Debug("JSON Debug Message"); 
関連する問題