Log4Net无法写入日志

时间:2014-10-27 14:00:41

标签: model-view-controller log4net umbraco umbraco7

我创建了一个新的Surface控制器,用于我的Umbraco 7.1.8安装。我的代码如下:

public class EnquiryController : SurfaceController
    {
        ILog Log = LogManager.GetLogger(
            MethodBase.GetCurrentMethod().DeclaringType
        );

        [HttpPost]
        public ActionResult Submit(EnquiryModel model)
        {
            if (!ModelState.IsValid)
                return CurrentUmbracoPage();

            // Create a regular expression to remove script tags
            Regex regex = new Regex(@"<script(.+?)*</script>");
            string request = regex.Replace(model.Message, string.Empty);
            request = request + "<br/><br/>" + "Phone: " + model.Telephone + "<br/><br/>" + "Email: " + model.Email;

            MailMessage message = new MailMessage();
            message.From = new MailAddress(model.Email);
            message.To.Add(new MailAddress("info@axumtech.com"));
            message.Subject = "New Website Enquiry - " + model.Name;
            message.Body = request;

            SmtpClient client = new SmtpClient();

            try
            {
                client.Send(message);
                TempData["success"] = true;
            }
            catch (Exception ex)
            {
                TempData["error"] = true;
                Log.Debug("Custom Error - " + ex.Message);
                return CurrentUmbracoPage();
            }

            return RedirectToCurrentUmbracoPage();

        }

    }

我的问题是我的代码无法发送电子邮件,只是执行CurrentUmbracoPage()方法调用。

要解决这个问题并找出问题所在,我试图记录使用Log4Net生成的异常,但是这似乎没有工作,因为没有任何内容写入标准的Umbraco日志。

这是在实时服务器上发生的。我使用Visual Studio 2013发布了我的开发代码,然后通过FTP将此发布的站点上传到服务器,确保将正确的SMTP detals输入到Web.Config。

我担心的一件事可能是这个问题的原因是这个发布过程似乎省略了我的解决方案中的/ Controllers和/ Models文件夹,尽管它实际上是项目的一部分。这是一个问题还是在.dlls中编译?

对我而言,似乎很奇怪,控制器文件夹被省略,并可能解释为什么没有发送电子邮件..

3 个答案:

答案 0 :(得分:0)

您是否构建了项目?您的控制器被编译为dll,因此不需要包含在已发布的站点中。

如果您仍然在构建此页面,那么请删除try catch并关闭自定义错误,以便获得ysod - 您希望此页面失败并显示反馈

然而,要使记录工作:

在顶部创建使用ref

使用Umbraco.Core.Logging

在捕获中: LogHelper.Error(MethodBase.GetCurrentMethod()。DeclaringType,ex.ToString(),ex)

答案 1 :(得分:0)

您的log4net配置似乎有问题(您是否正在调用XmlConfigurator.Configure?)。解决此问题的最简单方法是启用内部日志记录以查看错误:

启用内部日志记录:

<appSettings>
  <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

设置输出位置:

<system.diagnostics>
<trace autoflush="true">
    <listeners>
        <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\tmp\log4net.txt" />
    </listeners>
</trace>
</system.diagnostics>

答案 2 :(得分:0)

此问题是由我的模型中的错误引起的。模型参数被标记为int,但文本字符串正由表单发送给它。因此,模型始终无效,因此会在页面记录之前重定向页面。