/// <summary>初始化日志记录文件</summary> private StreamWriter InitLog() { var path = LogPath.EnsureDirectory(false); StreamWriter writer = null; var logfile = LogFile; if (!String.IsNullOrEmpty(logfile)) { try { var stream = new FileStream(logfile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); writer = new StreamWriter(stream, Encoding.UTF8) { AutoFlush = true }; } catch { } } if (writer == null) { logfile = Path.Combine(path, FileFormat.F(DateTime.Now)); var ext = Path.GetExtension(logfile); var i = 0; while (i < 10) { try { var stream = new FileStream(logfile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); writer = new StreamWriter(stream, Encoding.UTF8) { AutoFlush = true }; break; } catch { if (logfile.EndsWith("_" + i + ext)) { logfile = logfile.Replace("_" + i + ext, "_" + (++i) + ext); } else { logfile = logfile.Replace(ext, "_0" + ext); } } } } if (writer == null) { throw new XException("无法写入日志!"); } // 这里赋值,会导致log文件名不会随时间而自动改变 //LogFile = logfile; if (!isFirst) { isFirst = true; // 通过判断LogWriter.BaseStream.Length,解决有时候日志文件为空但仍然加空行的问题 //if (File.Exists(logfile) && LogWriter.BaseStream.Length > 0) LogWriter.WriteLine(); // 因为指定了编码,比如UTF8,开头就会写入3个字节,所以这里不能拿长度跟0比较 if (writer.BaseStream.Length > 10) { writer.WriteLine(); } //WriteHead(writer); writer.Write(GetHead()); } return(LogWriter = writer); }