NLog使用中碰到的问题整理
1,日志写mysql数据库报错,
原因:
在sql语句中使用了mysql的函数now() 导致插入失败,
解决办法: 使用参数代替now().
在nlog配置文件中设置 throwExceptions="true" internalLogLevel="Debug" 可以是nlog抛出异常方便问题定位,
2、一些layout方法记录: 见:https://github.com/NLog/NLog/wiki/Layout-Renderers
自定义参数:
<variable name="myvar" value="myvalue"/>
则参数 myvar 可以直接使用 ${myvar} 得到值 myvalue
也可以在代码中定义:
1 <target xsi:type="Database" name="LogOnlog" connectionStringName ="DataBase" > 2 <commandText> 3 Insert into MyLog(Operator_name,Operator_Type,IP,DateTime,Operation) Values(@Operator_name,@Operator_Type,@IP,@DateTime,@Operation); 4 </commandText> 5 <parameter name = "@Operator_name" layout = "${event-context:item=Operator_name}"/> 6 <parameter name = "@Operator_Type" layout = "${event-context:item=Operator_Type}" /> 7 <parameter name = "@DateTime" layout = "${event-context:item=DateTime}"/> 8 <parameter name = "@IP" layout = "${event-context:item=IP}" /> 9 <parameter name = "@Operation" layout = "${event-context:item=Operation}" /> 10 11 </target> 12 13 </targets> 14 15 <rules> 16 <logger name="*" minlevel="Trace " writeTo="LogOnlog"/> 17 </rules>
{event-context:item=Operation}中:后面的“Operation”在生成Logger时会形成名为“Operation”的键,
我们就可以在代码中对他赋值,详见:https://github.com/NLog/NLog/wiki/EventContext-Layout-Renderer。代码中是这样:
Logger logger = LogManager.GetCurrentClassLogger(); LogEventInfo lei = new LogEventInfo(); lei.Properties["Operator_name"] = Opeator_Name; lei.Properties["Operator_Type"] = Operator_Type; lei.Properties["DateTime"] = DateTime.Now; lei.Properties["IP"] = GetClientIPOrAdd.GetIP(); lei.Properties["Operation"] = Operation; lei.Level = LogLevel.Info; logger.Log(lei);
3、当我们修改 NLog.config 文件时,要重新编译解决方案,修改才会起作用。
4、路由规则rule
路由规则主要用于将日志和输出目标匹配起来,它一般有如下几个属性
-
name - 记录者的名字 (允许使用通配符*)
-
minlevel - 匹配日志范围的最低级别
-
maxlevel - 匹配日志范围的最高级别
-
level - 匹配的单一日志级别
-
levels - 匹配的一系列日志级别,由逗号分隔。
-
writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。
尚未解决的问题:
Logger logger = LogManager.GetLogger(string name);
这个方法中的name参数是干什么用的还是没有搞清楚。
------------补充-----------------------------
查看了源码 这个name参数好像没什么作用,记录日志的人,默认是当前类名(fullname),暂且当作一个标记使用。
参考地址:
http://www.cnblogs.com/freeliver54/p/6514686.html
http://www.cnblogs.com/TianFang/p/4003749.html
一个系列讲解: http://blog.csdn.net/u010176014/article/details/48655493
官网详细layout文档: https://github.com/NLog/NLog/wiki/Layout-Renderers