C# 如何将异常记录到文件

C# 如何将异常记录到文件,c#,C#,我一直在尝试将异常记录到一个文件中。我可以获得异常及其所有详细信息,当我在类中单步执行时,StreamWriter logWriter似乎没有达到我认为的效果 public static void Write(Exception exception) { string logfile = String.Empty; try { logfile = HttpContext.Current.Server.MapPath(ConfigurationManage

我一直在尝试将异常记录到一个文件中。我可以获得异常及其所有详细信息,当我在类中单步执行时,
StreamWriter logWriter
似乎没有达到我认为的效果

 public static void Write(Exception exception)
{
    string logfile = String.Empty;
    try
    {
        logfile = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["ErrorLog"]).ToString();
        StreamWriter logWriter;
        if (File.Exists(logfile))
        {
            logWriter = File.AppendText(logfile);
        }
        else
        {
            logWriter = File.CreateText(logfile);
            logWriter.WriteLine("=>" + DateTime.Now + " " + " An Error occurred: " + exception.StackTrace +
                                " Message: " + exception.Message + "\n\n");
            logWriter.Close();
            throw exception;
        }
    }
    catch (Exception e)
    {
        throw;
    }

}
我原以为日志编写器会将异常详细信息写到File.AppendText(logfile)
中,但它没有,只是直接跳出if语句。异常的所有细节都在else语句中,我试图将其放入
if`条件中,但抛出异常


如何将异常写入文件。我从你那里得到了密码。除了将异常写入文件外,其他一切都正常。

此代码段可以写入文件

public static bool WriteResult(string result)
        {
            using (StreamWriter sr = File.AppendText("result.txt"))
            {
                sr.WriteLine(result);
                sr.Flush();
                return true;
            }
            return false;
        }
对于您来说,您必须稍微调整它以满足您的要求:

public static void Write(Exception exception) {
    try {

        using(StreamWriter sr = File.AppendText("result.txt")) //new StreamWriter("result.txt", Encoding. ))
        {

            sr.WriteLine("=>" + DateTime.Now + " " + " An Error occurred: " + exception.StackTrace +
                " Message: " + exception.Message + "\n\n");
            sr.Flush();
        }

        catch (Exception e) {
            throw;
        }

    }

我写的一个很好的模板方法适用于每个项目

  private static void AddLog(string strMsg)
    {

        #region logfolder creation
        if (!System.IO.Directory.Exists("C:\\appname"))
        {
            System.IO.Directory.CreateDirectory("C:\\appname");
            if (!System.IO.Directory.Exists("C:\\appname\\Logs"))
            {
                System.IO.Directory.CreateDirectory("C:\\appname\\Logs");
            }
        }
        #endregion

        #region logfile creation
        FileStream fsc;
        logFileName = "C:\\appname\\Logs\\appnameLog_" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + ".txt";
        if (!System.IO.File.Exists(logFileName))
        {
            fsc = new FileStream(logFileName, FileMode.Create, FileAccess.Write);
            fsc.Close();
        }
        #endregion
        #region logging

        using (FileStream fs = new FileStream(logFileName, FileMode.Append, FileAccess.Write))
        {
            using (StreamWriter sr = new StreamWriter(fs))
            {
                try
                {
                    sr.WriteLine(strMsg);
                }
                catch (Exception exc)
                {
                    EventLogEntry(exc.ToString().Trim(), EventLogEntryType.Error, 7700);
                }
            }
        }
        #endregion
    }

请正确尝试并在方法外部引发异常:

public static void Write(Exception exception)
{
    string logfile = String.Empty;
        try
    {
        logfile = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["ErrorLog"]).ToString();

        if(File.Exists(logfile))
        {
            using(var writer = new StreamWriter(logfile, true))
            {
                writer.WriteLine(
                    "=>{0} An Error occurred: {1}  Message: {2}{3}", 
                    DateTime.Now, 
                    exception.StackTrace, 
                    exception.Message, 
                    Environment.NewLine
                    );
            }
        }
    }
    catch(Exception e)
    {
        throw;
    }
}
把它扔出去:

catch(Exception e)
{
    Write(e);
    throw;
}

日志文件的值是多少?-您是否正确添加了
ErrorLog
appsetting?为什么不将写入文件的行完全移到if/else之外呢。似乎您需要做的唯一有条件的事情就是决定何时创建Append。为什么不使用Serilog这样的日志框架来记录异常和信息,而不是重新发明轮子呢。只有一个think.logfile保存了要写入的文件的路径。“这是我在类似情况下使用的代码”并不是“为什么我的代码不能工作?”的好答案,尤其是当您发布的代码有很多问题时。@CodeCaster什么样的问题?问题是:使用区域(不),您可以调用
System.IO.Directory.CreateDirectory(“C:\\appname\\Logs”);
立即(8行对1),您可以使用
append
to
true
实例化一个
StreamWriter
,因此如果该文件不存在或附加到现有文件中,
EventLogEntry()
方法不存在,没有try-catch子句的方法可能会失败,并且在多线程环境中使用时会失败。只需使用log4net。请尝试更好的代码格式,您发布的内容很难阅读。