【问题标题】:How do I email errors logged with NLog? [closed]如何通过电子邮件发送使用 NLog 记录的错误? [关闭]
【发布时间】:2012-01-07 00:32:16
【问题描述】:

我第一次使用 NLog,我想出了如何写入文本文件,但现在我想给自己发送一封电子邮件。我假设当您向 NLog 提供 SMTP 凭据时。该程序集调用 System.Net.Mail 命名空间并处理发送电子邮件。如果这是错误的,请告诉我。如果您在此之前完成了此操作,我将不胜感激有关您完成发送电子邮件的任何信息。

下面是我的配置。

    <?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <targets>
    <!--<target name="logfile" xsi:type="File" fileName="C:\Users\keithb\Desktop\TestLog.txt" />-->
    <target name="Mail" xsi:type="Mail" html="true" subject="Error Received" body="${message}"         
         to="user2@someemaill.com"
         from="user@someemail.com"
         Encoding="UTF8"
         smtpUsername="user@someemail.com"
         enableSsl="False"
         smtpPassword="pa$$word"
         smtpAuthentication="Basic"
         smtpServer="mail.someemail.com"
         smtpPort="25" />
  </targets>
  <rules>
    <!--<logger name="*" minlevel="Debug" writeTo="logfile" />-->
    <logger name="*" level="Error" writeTo="Mail" />
    <logger name="*" level="Fatal" writeTo="Mail" />
  </rules>
</nlog>

我这样称呼错误

Imports NLog

Public Class HandleGetRouteInfo
    Private Shared logger As Logger = LogManager.GetCurrentClassLogger()

    Public Shared Function GetRouteInfo(ByVal routeInfo As RequestGetRouteInfo) As GetRouteInfoResponse
        'TODO: Check route ID, username, password
        logger.Fatal("User" & routeInfo.UserName & "has entered the GetRouteInfo Method.")
        logger.Error("User" & routeInfo.UserName & "has entered the GetRouteInfo Method.")
        Dim str As String = logger.Name
End Function
End Class

我正试图让它将错误、包含消息以及它通常记录到文件的内容发送到我的电子邮件。我知道如何捕获异常并将其通过电子邮件发送给自己,但我认为 NLog 有能力做到这一点。任何包含使用电子邮件功能的简单示例的教程都可以使用。我发现了很多东西,但无法让它发挥作用。如果你已经这样做了,一些示例代码或我需要做的其他事情的解释会有所帮助。我无法弄清楚我做错了什么。有人有什么想法吗?

【问题讨论】:

    标签: .net vb.net email nlog


    【解决方案1】:

    将您的编码从 UTF8 更改为 UTF-8

    假设您的 SMTP 设置中没有其他错误(这通常是导致邮件未发送的原因),它应该可以工作。

    【讨论】:

    • 就是这样,UTF8 应该是 UTF-8。我发现的例子有一个错误。谢谢。
    【解决方案2】:

    我认为您需要在 system.net 中设置mailSettings。像这样的:

    <system.net>
      <mailSettings>
    
        <smtp from="someone@someone.org">
          <network host="server.net" userName="someone@someone.org" password="somepassword"/>
        </smtp>
    
        <!--Just an example for testing. Can't have both-->
        <smtp deliveryMethod="SpecifiedPickupDirectory" from="someone@someone.org">
          <network host="localhost"/>
          <specifiedPickupDirectory pickupDirectoryLocation="d:\tmp\email"/>
        </smtp>
    
      </mailSettings>
    </system.net>
    

    第一个选项是使用 SMTP 服务器,第二个选项是发送电子邮件到您的本地文件夹。第二个选项适合测试。

    【讨论】:

    • 所以我需要创建电子邮件并保存它吗?为什么我不写一个日志类并写另一个类来发送电子邮件。我以前已经没有了。没有冒犯,这只是建议,所以我认为电子邮件错误或任何日志记录都会很简单。
    • 我很好奇你用什么来记录日志,我看到很多人使用 log4 net 和 elmah。
    • Elmah 用于一般异常处理,log4net 用于在调试时处理详细日志记录。
    • 您认为所有的 SMTP 功能都可以从 NLog .dll 中处理吗?我的意思是程序集调用框架来处理这项工作?
    • 我不确定除了基本功能之外您还需要哪些 SMTP 功能,但 NLog 和 log4net 都有很好的扩展点。如果某些功能无法按照您喜欢的方式运行,您可以随时创建自己的扩展程序或修改现有的扩展程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2012-04-11
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多