/// <summary>
 /// 写入致命错误信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="compact">是否使用紧凑格式(每行记录一条信息)</param>
 /// <param name="msg">日志内容</param>
 public void Fatal(LogFileSpan sequence, bool compact, object msg)
 {
     Write(LogLevel.Fatal, sequence, this.type, msg, compact);
 }
 /// <summary>
 /// 写入致命错误信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="compact">是否使用紧凑格式(每行记录一条信息)</param>
 /// <param name="format">格式化字符串</param>
 /// <param name="msgs">日志内容</param>
 public void Fatal(LogFileSpan sequence, bool compact, string format, params object[] msgs)
 {
     Write(LogLevel.Fatal, sequence, this.type, string.Format(format, msgs), compact);
 }
 /// <summary>
 /// 写入错误信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="compact">是否使用紧凑格式(每行记录一条信息)</param>
 /// <param name="msg">日志内容</param>
 public void Error(LogFileSpan sequence, bool compact, object msg)
 {
     Write(LogLevel.Error, sequence, this.type, msg, compact);
 }
 /// <summary>
 /// 写入信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="msg">日志内容</param>
 public void Fatal(LogFileSpan sequence, object msg)
 {
     Write(LogLevel.Fatal, sequence, this.type, msg, false);
 }
 /// <summary>
 /// 写入错误信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="msg">日志内容</param>
 public void Error(LogFileSpan sequence, object msg)
 {
     Write(LogLevel.Error, sequence, this.type, msg, false);
 }
 /// <summary>
 /// 写入错误信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="format">格式化字符串</param>
 /// <param name="msgs">日志内容</param>
 public void Error(LogFileSpan sequence, string format, params object[] msgs)
 {
     Write(LogLevel.Error, sequence, this.type, string.Format(format, msgs), false);
 }
 /// <summary>
 /// 写入警告信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="msg">日志内容</param>
 public void Warn(LogFileSpan sequence, object msg)
 {
     Write(LogLevel.Warn, sequence, this.type, msg, false);
 }
 /// <summary>
 /// 写入警告信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="compact">是否使用紧凑格式(每行记录一条信息)</param>
 /// <param name="msg">日志内容</param>
 public void Warn(LogFileSpan sequence, bool compact, object msg)
 {
     Write(LogLevel.Warn, sequence, this.type, msg, compact);
 }
 /// <summary>
 /// 写入调试信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="compact">是否使用紧凑格式(每行记录一条信息)</param>
 /// <param name="msg">日志内容</param>
 public void Debug(LogFileSpan sequence, bool compact, object msg)
 {
     Write(LogLevel.Debug, sequence, this.type, msg, compact);
 }
 /// <summary>
 /// 写入调试信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="msg">日志内容</param>
 public void Debug(LogFileSpan sequence, object msg)
 {
     Write(LogLevel.Debug, sequence, this.type, msg, false);
 }
 /// <summary>
 /// 写入信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="format">格式化字符串</param>
 /// <param name="msgs">日志内容</param>
 public void Info(LogFileSpan sequence, string format, params object[] msgs)
 {
     Write(LogLevel.Info, sequence, this.type, string.Format(format, msgs), true);
 }
 /// <summary>
 /// 写入信息
 /// </summary>
 /// <param name="sequence">日志文件生成频率</param>
 /// <param name="msg">日志内容</param>
 public void Info(LogFileSpan sequence, object msg)
 {
     Write(LogLevel.Info, sequence, this.type, msg, false);
 }
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="level">日志级别</param>
        /// <param name="sequence">日志文件生成频率</param>
        /// <param name="type">日志内容的类型(会按照类型生成子文件夹)</param>
        /// <param name="msg">日志内容</param>
        /// <param name="compact">是否使用压缩的格式来记录日志信息</param>
        private void Write(LogLevel level, LogFileSpan sequence, string type, object msg, bool compact)
        {
            if (level == LogLevel.Info || (this.level == LogLevel.None ? (int)level >= (int)LogAdapter.globallevel : (int)level >= (int)this.level)) //可以写日志
            {
                #region 使用系统定义的文件
                string path = this.logFilePath;
                if (string.IsNullOrEmpty(path))
                {
                    switch (sequence)
                    {
                    case LogFileSpan.None:
                    {
                        path = string.Format("{1}{0}{2}.txt", '_', level, type);
                        break;
                    }

                    case LogFileSpan.Year:
                    {
                        path = string.Format("{1}{0}{2}{0}{3}.txt", '_', level, type, DateTime.Now.Year);
                        break;
                    }

                    case LogFileSpan.Month:
                    {
                        path = string.Format("{1}{0}{2}{0}{3}.txt", '_', level, type, DateTime.Now.ToString("yyyyMM"));
                        break;
                    }

                    case LogFileSpan.Week:
                    {
                        path = string.Format("{1}{0}{2}{0}{3}{4}周.txt", '_', level, type, DateTime.Now.Year, cnci.Calendar.GetWeekOfYear(DateTime.Now, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Friday));
                        break;
                    }

                    case LogFileSpan.Hour:
                    {
                        path = string.Format("{1}{0}{2}{0}{3}.txt", '_', level, type, DateTime.Now.ToString("yyyyMMddHH"));
                        break;
                    }

                    case LogFileSpan.Lateast:
                    {
                        path = string.Format("{1}{0}{2}{0}{3}.txt", '_', level, type, DateTime.Now.ToString("yyyyMMddHH"));
                        break;
                    }

                    default:
                    {
                        path = string.Format("{1}{0}{2}{0}{3}.txt", '_', level, type, DateTime.Now.ToString("yyyyMMdd"));
                        break;
                    }
                    }
                    path = Path.Combine(LogAdapter.basepath, path);
                }
                try
                {
                    string dir = Path.GetDirectoryName(path);
                    if (!Path.IsPathRooted(dir))
                    {
                        dir = dir.Trim().Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar).TrimStart(Path.DirectorySeparatorChar);
                        dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, dir);
                    }
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }
                    if (level == LogLevel.Pulse && this.currentPulseCount >= PulseCount && File.Exists(path))
                    {
                        string txt = null;
                        this.currentPulseCount = 0;
                        using (StreamReader sr = new StreamReader(path, System.Text.Encoding.UTF8))
                        {
                            int totalCount = 0;
                            while (sr.ReadLine() != null)
                            {
                                totalCount++;
                            }
                            sr.BaseStream.Seek(0, SeekOrigin.Begin);
                            while (currentPulseCount++ < totalCount / 2)
                            {
                                sr.ReadLine();
                            }
                            txt = sr.ReadToEnd();
                        }
                        using (StreamWriter sw = new StreamWriter(path, false, System.Text.Encoding.UTF8))
                        {
                            sw.BaseStream.SetLength(0);
                            sw.Write(txt);
                        }
                    }
                    using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.UTF8))
                    {
                        if (compact)
                        {
                            sw.Write(DateTime.Now.ToString(timeformat));
                            sw.WriteLine(msg.ToString().Replace("\r\n", "").Replace("\r", "").Replace("\n", ""));
                        }
                        else
                        {
                            sw.Write("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄  ");
                            sw.Write(DateTime.Now.ToString(timeformat));
                            sw.WriteLine("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄");
                            sw.WriteLine(msg);
                        }
                        if (!compact)
                        {
                            sw.WriteLine();
                        }
                        sw.Flush();
                        sw.Close();
                    }
                }
                catch
                {
                }
                #endregion
            }
        }