如何将捕获的ASP.NET MVC3异常记录到文件中?

时间:2012-09-06 10:39:52

标签: c# asp.net asp.net-mvc-3

我正在尝试修复一个应该使用SmtpClient()发送电子邮件的远程服务器上的脚本。不幸的是,它失败了,并且有一个通用的catch-all异常,它向视图输出一条错误消息,然后只是快速地执行它。

我想要做什么,因为我无法真正远程调试它(我似乎无法在本地产生问题),是否有异常被记录到文件中供我使用通过FTP下载(我知道,共享主机)并仔细阅读以了解发生了什么。

以下是代码:

try
{
    var client = new SmtpClient();

    var emailRecipients = new List<string> { "test@example.co.uk" };

    var message = new MailMessage(Sender, emailRecipients.First());

    Person recipient = null;
    if (cbr.RecipientId.HasValue)
    {
        recipient = (from p in Entities.People where p.Id == cbr.RecipientId.Value select p).FirstOrDefault();
    }

    message.Subject = "Callback Request from " + cbr.Name;
    message.Body = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "\r\n\r\n" + "A callback request by \"" + cbr.Name + "\" has been made from the Foreman Laws website";

    if (!string.IsNullOrWhiteSpace(cbr.SourceURL))
    {
        message.Body += ", from the following URL: " + cbr.SourceURL + "\r\n\r\n";
    }
    else
    {
        message.Body += ".\r\n\r\n";
    }

    if (cbr.DepartmentId.HasValue)
    {
        var department = (from d in Entities.CustomRouteItems where d.Id == cbr.DepartmentId.Value select d).FirstOrDefault() as CustomPage;
        if (department != null)
        {
            message.Body += "Request for someone in " + department.Name + " to call back.\r\n";
            String email;
            if (DepartmentEmails.TryGetValue(department.Name, out email))
            {
                message.CC.Add(email);
            }
        }
        else
        {
            message.Body += "Request for anyone to call back (no department selected).\r\n";
        }
    }
    else if (recipient != null)
    {
        message.Body += "Request for " + recipient.Name + " to call back.\r\n";
        if (!string.IsNullOrWhiteSpace(recipient.Email))
        {
            message.CC.Add(recipient.Email);
        }
    } 
    else
    {
        message.Body += "Request for anyone to call back (no department selected).\r\n";
    }

    if (recipient != null)
    {
        message.Body += "The request was made from " + recipient.Name + "'s profile page on the site.\r\n\r\n";
    }

    message.Body += cbr.Name + "'s phone number is: " + cbr.TelephoneNumber + "\r\n";
    if (!string.IsNullOrWhiteSpace(cbr.Email))
    {
        message.Body += cbr.Name + "'s email address is " + cbr.Email + "\r\n";
    }

    message.Body += "\r\n";

    if (!string.IsNullOrWhiteSpace(cbr.SpecificTime))
    {
        message.Body += "The following time was specified for the callback: " + cbr.SpecificTime + "\r\n\r\n";
    }

    client.Send(message);

    cbr.Sent = true;
}
catch (Exception e)
{
    ModelState.AddModelError("Sent", "Sorry, your request could not be sent at this time, please try again later.");
}

1 个答案:

答案 0 :(得分:1)

下载 Log4net 并添加对您项目的引用。

Configure a rolling file appender 的。

现在在项目中使用此代码来记录错误。


using log4net;
Class YourClassName
{
    static readonly ILog _log = LogManager.GetLogger(typeof(YourClassName));
    public void DoWork()
    {
        try
        {
             //Your code goes here [written in your question]
        }
        catch(Exception e)
        {
            _log.Fatal(e);
        }
    }
}
相关问题