NLog使用整理

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

原文地址:https://www.cnblogs.com/xululublog/p/NLog_douluxu.html