小标
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" >
<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
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号