예제 #1
0
        /// <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();
        }
예제 #2
0
 /// <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")));
     }
 }