public ExeResEdm Update(string tableName, Dictionary <string, object> whereParas, Dictionary <string, object> updateFDList, DBOperUser dbLogMsg = null) { ComDBFun ComDBFun = new ComDBFun(DBBaseAttr); updateFDList = updateFDList ?? new Dictionary <string, object>(); var paras = whereParas.Union(updateFDList).ToDictionary(k => k.Key, v => v.Value); DbParameter[] pms = GetDbParametersFromDic(paras); string textParas = ComDBFun.GetUpdateSQLText(updateFDList.Keys.ToList()); string whereSql = ComDBFun.GetWhereCondition(whereParas.Keys.ToList(), "and"); textParas += whereSql; // " where " + dic.Keys.ToArray()[skipIndex] + "=@" + dic.Keys.ToArray()[skipIndex]; string sql = "update " + tableName + " set " + textParas; LogTraceEdm logMsg = null; if (dbLogMsg != null) { logMsg = new LogTraceEdm() { LogType = LogType.修改, UserId = dbLogMsg.UserId, UserName = dbLogMsg.UserName, TabOrModu = tableName, }; } var n = ExecuteNonQuery(sql, logMsg, pms); return(n); }
/// <summary> /// 记录初次访问日志 /// </summary> public static void WriteFirstVisitLog() { if (!bRegister) { return; } string firstReqKey = AppConfig.GetCacheKey(CacheConst.firstRequest); if (dataCache.GetCache(firstReqKey) as string == "0") { return; } lock (lockObj) { var client = ClientServerInfo.ClientInfo.GetClientInfo(); string userIP = client.IP + "[" + client.Host + "]"; string detail = string.Format("服务器(IIS版本{0})启动后,初次被访问,用户为{1}", ClientServerInfo.ServerInfo.GetIISVerson(), userIP); LogTraceEdm first = new LogTraceEdm() { Detail = detail, LogType = LogType.初次访问, Remark = "访问时间" + DateTime.Now, TabOrModu = "初次请求", }; dataCache.SetCache(firstReqKey, "0", expireType: Expire.Month); WriteLog(first); } }
/// <summary> /// 记录系统停止日志 /// </summary> public static void WriteServerStopLog() { string shutDownMessageShort = "不明原因"; try { #if NET HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null); if (runtime == null) { return; } string shutDownMessage = (string)runtime.GetType().InvokeMember("_shutDownMessage", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null); string shutDownStack = (string)runtime.GetType().InvokeMember("_shutDownStack", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null); var shutDownMessageArr = shutDownMessage.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Take(3).ToArray().Select(a => a.Trim('。').Trim('.').Trim(',').Trim(':')); shutDownMessageShort = string.Join(",", shutDownMessageArr); //写到事件查看器 new EventLog().WriteEntry(String.Format("\r\n\r\n_shutDownMessage={0}\r\n\r\n_shutDownStack={1}", shutDownMessage, shutDownStack), EventLogEntryType.Information); #endif } catch { } //写到自定义日志中 string detail = string.Format("服务器停止,停止原因为[{0}],运行时长{1}", shutDownMessageShort, ClientServerInfo.ServerInfo.GetRunningTime()); LogTraceEdm stop = new LogTraceEdm() { Detail = detail, LogType = LogType.停止, Remark = "停止时间" + DateTime.Now, }; WriteLog(stop); }
//开启线程,将备份日志写到Appender中 static void StartThreadToWriteFileToAppender() { Thread thread = new Thread(() => // thread = new Thread(new ThreadStart(() => { Thread.Sleep(1000 * 60); while (true) { try { ReadBackupLogInFileToAppender(); } catch //(Exception ex) { //throw ex;//不能让日志系统的异常导致整个系统的崩溃 } finally { Thread.Sleep(logReadThreadSleepNum * 1000); //10秒 } } }); thread.IsBackground = true; thread.Priority = ThreadPriority.AboveNormal; thread.Start(); LogTraceEdm logModel = new LogTraceEdm() { Detail = "读备份日志服务启动,服务执行周期为" + logReadThreadSleepNum + "秒" }; // new MyLogApp(). WriteLog(LogLevel.Info, logModel); }
//开启定时任务,写监控日志 static void WriteMonitorLogThread() { int sleepMillSec = 600000;//10分钟 try { int sleepMillSecTemp = AppConfig.GetFinalConfig("logMonitorIntervalMins", 10, LogApi.GetLogMonitorIntervalMins()) * 60000; if (sleepMillSecTemp > 0) { sleepMillSec = sleepMillSecTemp; } } catch { } if (sleepMillSec <= 0) { return; } int num = 0; Thread thread = new Thread(() => // thread = new Thread(new ThreadStart(() => { Thread.Sleep(1000 * 30); while (true) { try { num++; LogMonitorEdm monitor = new LogMonitorEdm() { Remark = "定时监控" }; WriteLog(monitor); WriteModelToFileForDebug(new { 内容 = DateTime.Now.ToString("HH:mm:ss.fff") + " , 第" + num + "次记录监控日志" }); } catch { } finally { Thread.Sleep(sleepMillSec); } } }); thread.IsBackground = true; thread.Priority = ThreadPriority.AboveNormal; thread.Start(); LogTraceEdm logModel = new LogTraceEdm() { Detail = "定时监控服务启动,服务执行周期为" + (sleepMillSec / 60000.0) + "分钟" }; WriteLog(logModel); }
protected ExeResEdm ExecuteNonQuery(string cmdText, LogTraceEdm logMsg, params DbParameter[] parameters) { ExeResEdm dBResEdm = SqlCMD(cmdText, cmd => cmd.ExecuteNonQuery(), parameters); if (dBResEdm.ErrCode == 0) { dBResEdm.ExeNum = Convert.ToInt32(dBResEdm.ExeModel); } WriteLogMsg(logMsg, dBResEdm.ExeNum, GetRealSql(cmdText, parameters)); return(dBResEdm); }
//static Buffer2DBAppender() //{ // StartMQTask(); //} //开启线程消费队列中的内容 void StartMQTask() { //开启线程消费队列中的内容 ThreadPool.QueueUserWorkItem(StartWriteTraceDataService, null); //启动写trace日志数据服务 ThreadPool.QueueUserWorkItem(StartWriteMonitorDataService, null); //启动写monitor日志数据服务 LogTraceEdm logModel = new LogTraceEdm() { Detail = "日志记录的" + BufferType + "消费服务启动" }; LogApi.WriteMsgToDebugFile(new { msg = logModel.Detail }); // LogApi.WriteLog(LogLevel.Info, logModel); }
public ExeResEdm ExecuteNonQuery(string cmdText, DBOperUser dbOperUser = null, params DbParameter[] parameters) { LogTraceEdm logMsg = null; if (dbOperUser != null) { logMsg = new LogTraceEdm() { LogType = LogType.ExecuteNonQuery, UserId = dbOperUser.UserId, UserName = dbOperUser.UserName, TabOrModu = "ExecuteNonQuery方法", }; } var n = ExecuteNonQuery(cmdText, logMsg, parameters); return(n); }
//记录系统启动日志 static void WriteServerStartupLog() { #if NET string vsVer = ".Net"; #else string vsVer = ".Net Core"; #endif string detail = string.Format("服务器启动,操作系统为{0},IIS版本为{1},.NET CLR为{2},开发框架为{3}", ClientServerInfo.ServerInfo.GetServerOS(), ClientServerInfo.ServerInfo.GetIISVerson(), ClientServerInfo.ServerInfo.GetCLRVersion(), vsVer); LogTraceEdm start = new LogTraceEdm() { Detail = detail, LogType = LogType.启动, Remark = "启动时间" + DateTime.Now, }; WriteLog(start); }
void WriteLogMsg(DBOperUser logUser, LogType logType, string detail, string module) { if (logUser != null && !string.IsNullOrEmpty(detail)) { LogTraceEdm logTraceEdm = new LogTraceEdm() { Detail = detail, TabOrModu = module, LogType = logType }; if (logUser != null) { logTraceEdm.UserId = logUser.UserId; logTraceEdm.UserName = logUser.UserName; } WriteLogMsg(logTraceEdm, null, null); } }
/// <summary> /// 写用户登录日志 /// </summary> public static string WriteLoginLog(string userId, string userName = "") { var client = ClientServerInfo.ClientInfo.GetClientInfo(); string userIP = client.IP + "[" + client.Host + "]"; string loginInfo = "用IP为:" + userIP + ",物理地址为:" + ClientServerInfo.ClientInfo.GetCustomerMac(userIP) + "," + ClientServerInfo.ClientInfo.GetUserAgentInfo() + "的计算机,于" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "登录了平台"; LogTraceEdm model = new LogTraceEdm() { UserId = userId, UserName = userName, LogType = LogType.登录, TabOrModu = "登录模块", Detail = loginInfo, }; return(WriteLog(model)); }
/// <summary> /// 写异常日志 /// </summary> /// <param name="model"></param> /// <returns></returns> public static string WriteExceptLog(Exception ex, string module = "异常模块", string remark = "") { try { var errMsg = ex.Message; try { var innerMsg = ex.InnerException.InnerException.InnerException.Message; errMsg = !string.IsNullOrEmpty(innerMsg) ? innerMsg : errMsg; } catch { } LogTraceEdm model = new LogTraceEdm() { LogType = LogType.异常, Detail = errMsg, Remark = remark, TabOrModu = module, }; return(WriteLog(model)); } catch (Exception ex1) { return(ex1.Message); } }
void WriteLogMsg(LogTraceEdm logMsg, object res, string keyID, params object[] values) { var skip = Log2Net.Util.AppConfig.GetConfigValue("SkipQueryTypeLog"); if (logMsg.LogType == LogType.查询 && skip == "1") { return; } if (logMsg != null && (!string.IsNullOrEmpty(logMsg.Detail) || !string.IsNullOrEmpty(logMsg.UserId + logMsg.UserName))) { try { if (string.IsNullOrEmpty(logMsg.Detail)) { string valStr = ""; if (values != null && values.Length > 0) { valStr = "(" + string.Join(",", values) + ")"; } string str = "SQL/条件"; if (keyID.Contains("=")) { // str = "语句"; } string action = logMsg.LogType.ToString(); string msg = action + "了" + str + "为【" + keyID + "】的" + logMsg.TabOrModu + "记录" + valStr + ",结果为" + res + "。"; logMsg.Detail = msg; } int maxLength = 2000; logMsg.Detail = logMsg.Detail.Substring(0, Math.Min(maxLength, logMsg.Detail.Length));//当字段过长时,截取前一部分,防止插入失败 try { var logRes = Task.Factory.StartNew(() => Log2Net.LogApi.WriteLog(LogLevel.DBRec, logMsg)); } catch { } } catch (Exception ex) { var exModel = new { ErrMsg = "写数据失败", DBData = logMsg, Exception = ex.Message, InnerException = ex.InnerException == null ? "" : ex.InnerException.Message }; Log2Net.LogApi.WriteMsgToInfoFile(exModel); } } }
private static Task HandleExceptionAsync(Microsoft.AspNetCore.Http.HttpContext context, int statusCode, string msg) { var data = new { code = statusCode.ToString(), is_success = false, msg = msg }; var result = JsonConvert.SerializeObject(new { data = data }); LogTraceEdm exLog = new LogTraceEdm() { Detail = result, LogType = LogType.异常, Remark = "异常时间" + DateTime.Now, TabOrModu = "异常模块", }; // LogApi.WriteLog( LogLevel.Error,exLog); context.Response.ContentType = "application/json;charset=utf-8"; return(context.Response.WriteAsync(result)); }
public ExeResEdm Delete(string tableName, Dictionary <string, object> whereParas, DBOperUser dbLogMsg = null) { ComDBFun ComDBFun = new ComDBFun(DBBaseAttr); string whereSql = ComDBFun.GetWhereCondition(whereParas.Keys.ToList(), "and", whereParas); string sql = "delete " + tableName + whereSql; DbParameter[] pms = GetDbParametersFromDic(whereParas); LogTraceEdm logMsg = null; if (dbLogMsg != null) { logMsg = new LogTraceEdm() { LogType = LogType.硬删除, UserId = dbLogMsg.UserId, UserName = dbLogMsg.UserName, TabOrModu = tableName, }; } var n = ExecuteNonQuery(sql, logMsg, pms); return(n); }
public ExeResEdm Add(string tableName, T model, DBOperUser dbLogMsg = null, params string[] skipCols) { Dictionary <string, object> dic = DtModelConvert <T> .GetPropertity(model); object[] values = dic.Values.ToArray(); // string idVal = dic.Values.ToArray()[0].ToString(); //SqlParameter[] pms = GetOleDbParameters(dic.Keys.ToList(), dic.Values.ToList());//参数过多,不会影响程序执行的正确性。 for (int i = 0; i < skipCols.Length; i++)//自动增长的列要忽略 { dic.Remove(skipCols[i]); } for (int i = dic.Values.Count - 1; i >= 0; i--)//值为空的不参与 { if (dic.Values.ToList()[i] == null) { dic.Remove(dic.Keys.ToList()[i]); } } ComDBFun ComDBFun = new ComDBFun(DBBaseAttr); string textParas = ComDBFun.GetSQLText(dic.Keys.ToList(), null); string sql = "insert into " + tableName + textParas; DbParameter[] pms = GetDbParametersFromDic(dic); LogTraceEdm logMsg = null; if (dbLogMsg != null) { logMsg = new LogTraceEdm() { LogType = LogType.添加, UserId = dbLogMsg.UserId, UserName = dbLogMsg.UserName, TabOrModu = tableName, }; } var n = ExecuteNonQuery(sql, logMsg, pms); return(n); }
/// <summary> /// .NET平台处理异常情况:先写日志再清除异常 /// </summary> /// <param name="url">错误处理完成后跳转到的网址,为空则不跳转</param> public static void HandAndWriteException(string url = null) { try { if (System.Web.HttpContext.Current.Server.GetLastError() == null) { return; } Exception ex = System.Web.HttpContext.Current.Server.GetLastError().GetBaseException(); string serMsg = string.Format("服务器环境:操作系统{0},IIS版本[{1}],.Net CLR版本[{2}],运行时长[{3}]", ClientServerInfo.ServerInfo.GetServerOS(), ClientServerInfo.ServerInfo.GetIISVerson(), ClientServerInfo.ServerInfo.GetCLRVersion(), ClientServerInfo.ServerInfo.GetRunningTime()); string detail = string.Format("URl:{0}\n引发异常的方法:{1}\n错误信息:{2}\n错误堆栈:{3}\n{4}", System.Web.HttpContext.Current.Request.RawUrl, ex.TargetSite, ex.Message, ex.StackTrace, serMsg); LogTraceEdm exLog = new LogTraceEdm() { Detail = detail, LogType = LogType.异常, Remark = "异常时间" + DateTime.Now, TabOrModu = "异常模块", }; WriteLog(exLog); } catch { } finally { try { System.Web.HttpContext.Current.Server.ClearError(); if (!string.IsNullOrEmpty(url)) { System.Web.HttpContext.Current.Response.Redirect(url); } } catch { } } }