/// <summary> /// 多线程自动初始化日志数据库 /// </summary> void Init() { new Action(() => { string tableName = LogConfig.CurrentTableName; Check.NullOrEmpty(tableName, "tableName"); Check.NullOrEmpty(LogConfig.DBConnectionString, "DBConnectionString"); using (DataBaseHelper helper = new DataBaseHelper(LogConfig.DBConnectionString)) { if (!helper.QueryDatabaseExists(LogConfig.DBName)) { helper.CreateDatabase(LogConfig.DBName); helper.ChangeDatabase(LogConfig.DBName); helper.ExcuteSql(SQL_DROP_TRIGGER); helper.ExcuteSql(SQL_CREATE_TRIGGER); } helper.ChangeDatabase(LogConfig.DBName); var table = helper.GetTables().Where(p => p.TableName.StartsWith("Logger_")).OrderByDescending(p => p.CreateDate).FirstOrDefault(); if (table != null) { int y = 0, m = 0, d = 0; var year = table.TableName.Substring("Logger_".Length, 4); var month = table.TableName.Substring(("Logger_" + year + "_").Length, 2); var day = table.TableName.Substring(("Logger_" + year + "_" + month + "_").Length, 2); Check.True(!int.TryParse(year, out y), () => { throw new ArgumentException("Yeah"); }); Check.True(!int.TryParse(month, out m), () => { throw new ArgumentException("month"); }); Check.True(!int.TryParse(day, out d), () => { throw new ArgumentException("day"); }); DateTime tableTime = new DateTime(y, m, d); if (DateTime.Now.Subtract(tableTime).TotalDays >= LogConfig.SplitTableByDays) { var name = "Logger_" + tableTime.AddDays(LogConfig.SplitTableByDays).ToString("yyyy_MM_dd"); var ret = helper.ExcuteSql(string.Format(SQL_CREATE_TABLE, name)); LogConfig.CurrentTableName = name; } } else { var ret = helper.ExcuteSql(string.Format(SQL_CREATE_TABLE, tableName)); } } }).DynamicInvoke(); }
/// <summary> /// 继承方法 /// </summary> /// <param name="LogLevel"></param> /// <param name="message"></param> protected override void InnerLogMethod(LogLevel LogLevel, string message) { //每隔一分钟,检测是否需要分表 if (DateTime.Now.Subtract(preInstanceTime).TotalSeconds >= 60) { Init(); } using (DataBaseHelper db = new DataBaseHelper(LogConfig.DBConnectionString)) { db.ChangeDatabase(LogConfig.DBName); db.ExcuteSql(string.Format(SQL_INSERT_DATA, LogConfig.CurrentTableName, LogLevel.ToString(), Page, message, User, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); } }