2017-09-22 93 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");