【问题标题】:How to write json using NLog如何使用 NLog 编写 json
【发布时间】:2018-03-02 10:27:56
【问题描述】:

我的主要目标是使用 NLog 编写然后读取以下信息。我已经完成了以下操作,但无法继续前进,

NLOG 配置,

  <nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="eventlog" xsi:type="EventLog" layout="${message}" log="Application" source="My App" />
      <target name='jsonFile' type='File' fileName='${basedir}/APILog/${date:format=yyyy-MM-dd}-webapi.json'>
        <layout type='JsonLayout'>
          <attribute name='time' layout='${longdate}' />
          <attribute name='executedby' layout='${executedby}' />
          <attribute name='username' layout='${username}' />
          <attribute name='deletedFromDB' layout='${deletedFromDB}' />
          <attribute name='deletedFromAD' layout='${deletedFromAD}' />
        </layout>
      </target>
    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="eventlog" />
      <logger name="*" minlevel="Trace" writeTo="jsonFile" />
    </rules>
  </nlog>

这是我要读取和写入此文件的内容,

public class LogEntry
{
    public DateTime Time { get; set; }
    public string ExecutedBy { get; set; }
    public string username { get; set; }
    public string deletedFromDB { get; set; }
    public string deletedFromAD { get; set; }
}

代码

var entryJson = Newtonsoft.Json.JsonConvert.SerializeObject(entry);

// 看起来像这样

"{\"时间\":\"2018-03-02T11:33:55.426732+00:00\",\"ExecutedBy\":\"REMOVED\",\"用户名\":\"示例用户名\",\"ExistingQAFromDB\":\"0\",\"ExistingQAFromAD\":\"False\",\"DeletedFromDB\":\"True\",\"DeletedFromAD\":\"false\" ,\"状态\":null}";

_logger.Debug(entryJson);

结果是……

{ "时间": "2018-03-02 11:34:01.1948" }

如何读写这个 LogEntry 对象到日志文件?

【问题讨论】:

  • @Liam 即使我输入了正确格式的 json,它也不会进入文件,我得到的只是我怀疑的时间:(
  • _logger.Debug("JSON 调试消息"); - 您正在创建一个没有任何数据的日志条目。 NLog 没有任何东西可以用 (${username}, ${executedby}" 和其他来代替您的自定义令牌。
  • @n.piskunov 即使输入是这样的,_logger.Debug(@"{'time': '2018-03-02 11:19:50.4983','executedby': 'executedby' }");... 我回来了 { "time": "2018-03-02 11:23:06.2556" }
  • 我现在添加了完整的对象
  • 不,检查您正在使用的 Debug() 方法的签名。传递单个字符串参数 - 意味着传递消息。而且您还没有在 NLog 模板条目中指定消息输出。 NLog 布局中的标记是预定义的。如果您想将您的 json-obj 道具渲染为 NLog 布局标记 - 您需要编写自定义布局渲染器,更简单的替代方法是使用事件属性。 github.com/NLog/NLog/wiki/JsonLayout

标签: c# asp.net-web-api nlog


【解决方案1】:

您已经将纯 JSON 写入 NLog。无需同时激活 NLog JsonLayout。

这样做:

  <target name='jsonFile' type='File' fileName='${basedir}/APILog/${date:format=yyyy-MM-dd}-webapi.json' layout='${message}' />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    相关资源
    最近更新 更多