C#编程之C#使用NLog记录日志
小标 2018-11-27 来源 : 阅读 3479 评论 0

摘要:本文主要向大家介绍了C#编程之C#使用NLog记录日志,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之C#使用NLog记录日志,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

NLog是什么?
        NLog是一个简单灵活的.NET日志记录类库,可以免费使用的开源代码。
        NLog日志输出什么类型?
        输出文本文件,如TXT文件
         输出控制台
        输出EMAIL邮件 
    输出数据库 
    输出Windows系统日志等等
        如何使用NLog组件?
          1)下载NLog组件
                  通过VS2015的NuGet下载组件,见图
   
  
   下载NLog和NLog.Config即可。
   
     2)配置NLog.Config文件
     
     
     关于NLog配置参数,请参考NLog官网://nlog-project.org/

    源代码托管地址:https://github.com/nlog/NLog/wiki/Configuration-file

    以下是我的配置文件中的关键配置代码,直接上代码:
     
    <target name="database" xsi:type="Database" keepConnection="false" useTransactions="true"
            dbProvider="Oracle.ManagedDataAccess.Client"
            connectionStringName="OraConnstr"  
            commandText="insert into <表名>(APPNAME,MODULENAME,PROCNAME,OPERATIONTYPE,LOGGER,LOGMESSAGE,IP,LONGDATE,USERNAME,LOGLEVEL) values(:APPNAME,:MODULENAME,:PROCNAME,:OPERATIONTYPE,:LOGGER,:LOGMESSAGE,:IP,:TIME_STAMP,:USERNAME,:LOGLEVEL)"
            commandType="Text" >

    Oracle.ManagedDataAccess.Client  

         <target xsi:type="Mail" name="infoMail"
            smtpServer="smtp.126.com"
            smtpPort="25"
            smtpAuthentication="Basic"
            smtpUserName="你的126邮箱名字"  
            smtpPassword="你的126邮箱密码"
            enableSsl="true"
            addNewLines="true"
            from="你的发送126邮箱地址 "  
                  to="接收的邮箱地址 "  
                  subject="主题名称 "
            header="==============="
            body="${newline}${message}${newline}"
            footer="================"
            encoding="UTF-8" />

     <!—规则定义
     -->

   3)NLog自定义类库封装
    以下是主要代码:
日志类初始化
     
   try
{
    if (File.Exists(CONFIGPATH))
    {
        StringBuilder sb = new StringBuilder(STRINGMAX);
        WinAPI.GetPrivateProfileString("LOGMANAGER", "DATALOGSOURCE", "", sb, STRINGMAX, CONFIGPATH);
        DATALOGSOURCE = sb.ToString();
        WinAPI.GetPrivateProfileString("LOGMANAGER", "DATALOGNAME", "", sb, STRINGMAX, CONFIGPATH);
        DATALOGNAME = sb.ToString();
        WinAPI.GetPrivateProfileString("LOGMANAGER", "MODE", "", sb, STRINGMAX, CONFIGPATH);
        LogMode = sb.ToString();
    }
    switch (LogMode)
    {
        case "1": //Txt文件记录日志
               break;
        case "2": //windows系统记录日志
               if (!EventLog.SourceExists(DATALOGSOURCE))
                EventLog.CreateEventSource(DATALOGSOURCE, DATALOGNAME);
            SysLog = new EventLog(DATALOGNAME);
            break;
        case "3": //数据库记录日志
               break;
        case "4": //发送邮件
               break;
    }
}
catch (Exception ex)
{
    throw new Exception(ex.Message);
}
写日志函数
     public static void AddErrorLog(string msg, string APPNAME = "", string MODULENAME = "", string PROCNAME = "", string OPERATIONTYPE = "", string IP = "127.0.0.1", string USERNAME = "ADMIN", string LOGGER = "From")
{
    switch (LogMode)
    {
        case "1": //Txt文件记录日志
               logger.Error(msg);
            break;
        case "2": //windows系统记录日志
               SysLog.Source = DATALOGSOURCE;
            SysLog.WriteEntry(msg, EventLogEntryType.Error);
            break;
        case "3"://写数据库表
               WriteDB(msg, LogLevel.Error, APPNAME, MODULENAME, PROCNAME, OPERATIONTYPE, IP, USERNAME, LOGGER);
            break;
        case "4": //发送邮件
               logger.Error(msg);
            break;
    } 
}

   写数据库公共函数:
    public static void WriteDB(string LOGMESSAGE, LogLevel Level, string APPNAME = "", string MODULENAME = "", string PROCNAME = "", string OPERATIONTYPE = "", string IP = "127.0.0.1", string USERNAME = "ADMIN", string LOGGER = "From")
{
    if (LOGMESSAGE.Length > 3000)
    {
        LOGMESSAGE = LOGMESSAGE.Substring(0, 3000);
    }
    LogEventInfo lei = new LogEventInfo();
    lei.Properties["ID"] = Guid.NewGuid().ToString("D");
    lei.Properties["APPNAME"] = APPNAME;
    lei.Properties["MODULENAME"] = MODULENAME;
    lei.Properties["PROCNAME"] = PROCNAME;
    lei.Properties["OPERATIONTYPE"] = OPERATIONTYPE;
    lei.Properties["LOGGER"] = LOGGER;
    lei.Properties["LOGMESSAGE"] = LOGMESSAGE;
    lei.Properties["IP"] = IP;
    lei.Properties["TIME_STAMP"] = DateTime.Now;
    lei.Properties["USERNAME"] = USERNAME;
    lei.Properties["LOGLEVEL"] = Level.Name;
    lei.Level = Level;
    logger.Log(lei);
}
NLog自定义类库使用
     直接调用写数据库:Log.AddErrorLog(ex.Message,"应用名称","模块名称","系统MAIN函数执行","自动","127.0.0.1",sysdata.curUserID,"Program");

  可以修改sysconfig.ini文件的日志写入模式,见图

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 1
看完这篇文章有何感觉?已经有1人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved