zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    OAuth2.0认证和授权原理
    APNs详细使用步骤
    解决IDEA因分配内存而引起的卡顿
    JAVA 第二周学习总结
    JAVA 第一周学习总结
    Mac OS 上配置java开发环境
    【DP】【单调队列】洛谷 P2216 [HAOI2007]理想的正方形 题解
    【DP】【构造】NOIp模拟题 演讲 题解
    【2-SAT】【并查集】NOIp模拟题 植树方案 题解
    【字符串】【hash】【倍增】洛谷 P3502 [POI2010]CHO-Hamsters 题解
  • 原文地址:https://www.cnblogs.com/xululublog/p/NLog_douluxu.html
Copyright © 2011-2022 走看看