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