lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。 using System; using System.Collections.Generic; using System.Text; using System.Configuration; using System.IO; namespace WriteLogClass { /// /// 错误信息处理类 /// public class Error { /// /// 对象 /// public object obj = new object(); /// /// 对象 /// public static object Obj = new object(); /// /// 错误信息中的错误信息 /// private string ErrMessAge; /// /// 错误信息中的错误信息 /// public string ErrMessage { get { return ErrMessAge; } set { ErrMessAge = value; } } /// /// 错误ID /// private string ErrId; /// /// 错误ID /// public string Id { get { return ErrId; } set { ErrId = value; } } /// /// 错误信息 /// private string MessAge; /// /// 错误信息 /// public string Message { get { return MessAge; } set { MessAge = value; } } /// /// 类名 /// private string className; /// /// 类名 /// public string ClassName { get { return className; } set { className = value; } } /// /// 方法名 /// private string functionName; /// /// 方法名 /// public string FunctionName { get { return functionName; } set { functionName = value; } } /// /// 错误源 /// private string DataSource; /// /// 错误源 /// public string Source { get { return DataSource; } set { DataSource = value; } } #region 把错误信息写入日志 /// /// 把错误信息写入日志 /// public void WriteLog() { lock (this.obj) { string Path = ""; try { Path=System.Configuration.ConfigurationManager.AppSettings["LogPath"].ToString(); } catch (Exception e) { Path = "/Log"; this.ErrMessAge = e.Message; } string p = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "//" + Path + "//" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; Path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "//" + Path; if (!Directory.Exists(Path)) { DirectoryInfo Dir = Directory.CreateDirectory(Path); Dir.Refresh(); } if (!File.Exists(p)) { FileStream fso = File.Create(p); fso.Close(); fso.Dispose(); StreamWriter SW = File.AppendText(p); SW.WriteLine("==================================================================================================="); SW.WriteLine(" 本站日志文件 "); SW.WriteLine("==================================================================================================="); SW.WriteLine(""); SW.Flush(); SW.Close(); SW.Dispose(); } StreamWriter sw = File.AppendText(p); sw.WriteLine(""); sw.WriteLine("==================================================================================================="); sw.WriteLine(""); sw.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] "); sw.WriteLine("错误数据源:" + this.Source); sw.WriteLine("错误方法:"); sw.WriteLine("错误方法所属类:" + this.ClassName); sw.WriteLine("错误方法:" + this.FunctionName); try { sw.WriteLine("当前IP:" + XiaoFeng.Function.GetIP4Address() + ""); sw.WriteLine("当前错误页面地址:" + System.Web.HttpContext.Current.Request.Url.ToString()); } catch (Exception ex) { } sw.WriteLine("当前错误信息:" + this.Message.ToString()); sw.Flush(); sw.Close(); sw.Dispose(); } } /// /// 写错误日志 /// /// Exception类 public static void WriteLog(Exception E) { lock (Obj) { string Path = ""; try { Path = System.Configuration.ConfigurationManager.AppSettings["LogPath"].ToString(); } catch (Exception e) { Path = "/Log"; } string p = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "//" + Path + "//" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; Path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "//" + Path; if (!Directory.Exists(Path)) { DirectoryInfo Dir = Directory.CreateDirectory(Path); Dir.Refresh(); } if (!File.Exists(p)) { FileStream fso = File.Create(p); fso.Close(); fso.Dispose(); StreamWriter SW = File.AppendText(p); SW.WriteLine("==================================================================================================="); SW.WriteLine(" 本站日志文件 "); SW.WriteLine("==================================================================================================="); SW.WriteLine(""); SW.Flush(); SW.Close(); SW.Dispose(); } StreamWriter sw = File.AppendText(p); sw.WriteLine(""); sw.WriteLine("==================================================================================================="); sw.WriteLine(""); sw.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] "); sw.WriteLine("错误数据源:" + E.Source); sw.WriteLine("错误方法所属类:" + E.TargetSite.DeclaringType.Name.ToString()); sw.WriteLine("错误方法:" + E.TargetSite.Name.ToString()); try { sw.WriteLine("当前IP:" + XiaoFeng.Function.GetIP4Address() + ""); sw.WriteLine("当前错误页面地址:" + System.Web.HttpContext.Current.Request.Url.ToString()); } catch (Exception ex) { } sw.WriteLine("当前错误信息:" + E.Message.ToString()); sw.Flush(); sw.Close(); sw.Dispose(); } } #endregion } } -----------------------------------另一种简单的写日志的方法---------------------------------- //记录LOG信息 private void writelog(string info) { try { string Path = PathBase + "log" + DateTime.Now.ToLongDateString() + ".txt";//如果不存在则新建一个文件,存在的话就直接加进去 System.IO.StreamWriter rw = new System.IO.StreamWriter(Path, true); rw.WriteLine(info + " --------- " + DateTime.Now.ToString());//加时间标签 rw.Close(); } catch { // } } --------------------------------另一种简单的写日志的方法-------------------------------------- public static class ExpHelper { private static object logLock = new object(); public static string fileConsolePath = Application.StartupPath + "//txt//cos_" + DateTime.Now.ToString().Replace(':', '.') + ".txt"; public static string fileLogPath = Application.StartupPath + "//txt//log_" + DateTime.Now.ToString().Replace(':', '.') + ".txt"; public static void Cos(string text) { File.AppendAllText(fileConsolePath, DateTime.Now.ToString() + " " + text + Environment.NewLine); } public static void Log(string text) { lock(logLock) File.AppendAllText(fileLogPath, DateTime.Now.ToString() + " " + text + Environment.NewLine); } } ------------------------------------------------------------------ public static class WriteLogClass { /// /// 对象 /// private static object logLock = new object(); /// /// 应用程序的启动路径 /// private static string PathBase = System.AppDomain.CurrentDomain.BaseDirectory; /// /// 写日志信息 /// /// public static void WriteLog(string logInfo) { lock (logLock) { string Path = PathBase + "Log//Log_" + DateTime.Now.ToLongDateString() + ".txt"; //string Path_add = Application.StartupPath + "//Log//log_" + DateTime.Now.ToLongDateString() + ".txt"; //File.AppendAllText(Path_add, DateTime.Now.ToString() + " " + logInfo + Environment.NewLine); System.IO.StreamWriter SW = new System.IO.StreamWriter(Path, true);//如果不存在则新建一个文件,存在的话就直接加进去 try { SW.WriteLine(DateTime.Now.ToString() + " --------- " + logInfo);//加时间标签 } catch { } SW.Flush(); SW.Close(); SW.Dispose(); } } }