1、通過Nuget安裝NLog 下載,簡單入門 請參照 我剛才轉的幾篇文章,下面我直接貼代碼
2、建表語句
create table TBL_LOG ( id VARCHAR2(60) not null, appname VARCHAR2(20), modulename VARCHAR2(30), procname VARCHAR2(30), operationtype VARCHAR2(20), logger VARCHAR2(500), logmessage VARCHAR2(3000) not null, ip VARCHAR2(32), longdate VARCHAR2(36), username VARCHAR2(36), createdate DATE default sysdate, loglevel VARCHAR2(12) )
3、NLog.config,正式運行 throwExceptions="false"
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true" throwExceptions="true" internalLogLevel="Info" internalLogFile="d:\work\log1.txt"> <targets async="true"> <target name="database" xsi:type="Database" keepConnection="false" useTransactions="true" dbProvider="System.Data.OracleClient.OracleConnection,System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionString="Data Source=ORCL;User Id=oracle;Password=oracle;Integrated Security=no;" commandText="insert into TBL_LOG(APPNAME,MODULENAME,PROCNAME,OPERATIONTYPE,LOGGER,LOGMESSAGE,IP,LONGDATE,USERNAME,LOGLEVEL) values(:APPNAME,:MODULENAME,:PROCNAME,:OPERATIONTYPE,:LOGGER,:LOGMESSAGE,:IP,:TIME_STAMP,:USERNAME,:LOGLEVEL)"> <parameter name="APPNAME" layout="${event-context:item=APPNAME}" /> <parameter name="MODULENAME" layout="${event-context:item=MODULENAME}" /> <parameter name="PROCNAME" layout="${event-context:item=PROCNAME}" /> <parameter name="OPERATIONTYPE" layout="${event-context:item=OPERATIONTYPE}" /> <parameter name="LOGGER" layout="${event-context:item=LOGGER}" /> <parameter name="LOGMESSAGE" layout="${event-context:item=LOGMESSAGE}" /> <parameter name="IP" layout="${event-context:item=IP}" /> <parameter name="TIME_STAMP" layout="${longdate}" /> <parameter name="USERNAME" layout="${event-context:item=USERNAME}" /> <parameter name="LOGLEVEL" layout="${level:uppercase=true}" /> </target> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="database" /> </rules> </nlog>
4、簡單封裝
public class Logger { #region 初始化 /// <summary> /// 數據錯誤無法獲取用戶時使用 /// </summary> public static string DefaultUser = "system"; /// <summary> /// 默認地址 /// </summary> public static string DefaultIP = "127.0.0.1"; NLog.Logger _logger; private Logger(NLog.Logger logger) { _logger = logger; } public Logger(string name) : this(LogManager.GetLogger(name)) { } public static Logger Default { get; private set; } static Logger() { Default = new Logger(LogManager.GetCurrentClassLogger()); } #endregion #region Process日志寫入 /// <summary> /// 日志寫入 /// </summary> /// <param name="APPNAME">菜單大類</param> /// <param name="MODULENAME">二級菜單</param> /// <param name="PROCNAME">本級菜單</param> /// <param name="OPERATIONTYPE">操作類型</param> /// <param name="LOGMESSAGE">詳細日志</param> /// <param name="IP">ip地址</param> /// <param name="USERNAME">用戶名</param> /// <param name="LOGGER">LOGGER</param> public void Process(string APPNAME, string MODULENAME, string PROCNAME, OperationType OPERATIONTYPE, string LOGMESSAGE, string IP, string USERNAME, string LOGGER) { 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["LOGMESSAGE"] = LOGMESSAGE; lei.Properties["IP"] = IP; lei.Properties["USERNAME"] = USERNAME; lei.Properties["LOGGER"] = LOGGER; lei.Level = LogLevel.Info; _logger.Log(lei); } /// <summary> /// 日志寫入,自己傳日志類別 /// </summary> /// <param name="APPNAME">菜單大類</param> /// <param name="MODULENAME">二級菜單</param> /// <param name="PROCNAME">本級菜單)</param> /// <param name="OPERATIONTYPE">操作類型</param> /// <param name="LOGMESSAGE">詳細日志</param> /// <param name="IP">ip地址</param> /// <param name="USERNAME">用戶名</param> /// <param name="LOGGER">LOGGER</param> /// <param name="Level">日志級別</param> public void Process(string APPNAME, string MODULENAME, string PROCNAME, OperationType OPERATIONTYPE, string LOGMESSAGE, string IP, string USERNAME, string LOGGER, LogLevel Level) { 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["LOGMESSAGE"] = LOGMESSAGE; lei.Properties["IP"] = IP; lei.Properties["USERNAME"] = USERNAME; lei.Properties["LOGGER"] = LOGGER; lei.Level = Level; _logger.Log(lei); } #endregion } /// <summary> /// 操作類型枚舉 /// </summary> public enum OperationType { /// <summary> /// 保存或添加 /// </summary> [System.ComponentModel.Description("保存或添加")] ADD, /// <summary> /// 更新 /// </summary> [System.ComponentModel.Description("更新")] UPDATE, /// <summary> /// 審核 /// </summary> [System.ComponentModel.Description("審核")] AUDIT, /// <summary> /// 刪除 /// </summary> [System.ComponentModel.Description("刪除")] DELETE, /// <summary> /// 讀取/查詢 /// </summary> [System.ComponentModel.Description("讀取/查詢")] RETRIEVE, /// <summary> /// 登錄 /// </summary> [System.ComponentModel.Description("登錄")] LOGIN, /// <summary> /// 查看 /// </summary> [System.ComponentModel.Description("查看")] LOOK }
5、asp.net中的調用列子:
1 Logger.Default.Process("系統管理", "權限管理", "用戶管理", OperationType.RETRIEVE, "測試寫入", Logger.DefaultIP, Logger.DefaultUser, this.GetType().ToString(), NLog.LogLevel.Error); 2 Logger.Default.Process("系統管理", "權限管理", "用戶管理", OperationType.RETRIEVE, "測試寫入", Logger.DefaultIP, Logger.DefaultUser, this.GetType().ToString());