2014-10-27 6 views
0

Я создал новый контроллер Surface для использования с установкой Umbraco 7.1.8. Мой код выглядит следующим образом:Log4Net не удается записать в журнал

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("[email protected]")); 
      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, чтобы в SM.Config были введены правильные SMTP-сообщения.

Единственное, что касается меня, и может быть причиной этой проблемы, заключается в том, что этот процесс публикации, похоже, не позволяет мне оставить папки/Controllers и/Models из моего решения, несмотря на то, что на самом деле является частью проекта. Это проблема или они скомпилированы в DLL?

мне кажется довольно странным, что папка контроллеров опущена и потенциально может объяснить, почему почта не отправляется ..

+0

Это должно быть изменено с [tag: model-view-controller] на [tag: asp.net-mvc] – PTuckley

ответ

0

Построил вы свой проект? Ваши контроллеры скомпилированы в dll, поэтому их не нужно включать в опубликованный сайт.

Если вы до сих пор строит эту страницу, то избавиться от попытке поймать и превратить собственные ошибки прочь, так что вы получите ysod - вы хотите эту страницу на провал с адр обратной

Однако, чтобы получить регистрации работы:

наверху, созданных с помощью реф

используя Umbraco.Core.Logging

В улове: LogHelper.Error (. MethodBase.GetCurrentMethod() DeclaringType, ex.ToString(), экс)

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> 
0

Эта проблема была вызвана ошибка в моей модели. Параметр модели был помечен как int, но текстовая строка передавалась ему формой. Из-за этого модель всегда была недействительной и поэтому перенаправляла страницу до того, как она когда-либо попадет в журнал.