【发布时间】: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