2014-10-27 182 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將此發佈的站點上載到服務器,以確保將正確的SMTP detals輸入到Web.Config中。

關注我並可能導致此問題的一件事是,儘管實際上是項目的一部分,但此發佈過程似乎忽略了來自我的解決方案的/ Controllers和/ Models文件夾。這是一個問題還是這些編譯在.dll中?

對我來說似乎相當奇怪的是,控制器文件夾被省略,可能解釋爲什麼電子郵件沒有被髮送..

+0

這應該從[tag:model-view-controller]重新標記爲[tag:asp.net-mvc] – PTuckley 2014-10-27 14:40:25

回答

0

你建立你的項目?你的控制器被編譯成一個DLL,因此不需要包含在已發佈的站點中。

如果你還在建設這個頁面,然後擺脫嘗試捕捉,並把自定義錯誤,這樣您就得到了YSOD - 你希望這個頁面失敗,直銷反饋

但是,要記錄工作:

在頂端創建使用利用Umbraco.Core.Logging

在catch REF

: LogHelper.Error(MethodBase.GetCurrentMethod()DeclaringType,ex.ToString(),EX)

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,但文本字符串正在通過表單發送給它。因爲這個模型總是無效的,因此在頁面打到日誌之前會重定向頁面。