尝试使用appsettings.json配置Serilog电子邮件接收器以使用Gmail

时间:2017-10-25 21:09:36

标签: email serilog

在POC中,我让Smtp客户端通过Gmail发送电子邮件,因此我知道有关连接到Gmail的SMTP服务器的信息是正确的。我现在正尝试通过appsettings.json配置Serilog以通过Gmail发送我的日志条目。我需要能够针对不同的环境配置它。我现在把它设置为Verbose以便我得到任何东西......以后不会这样。我没有得到任何东西,但我的文件日志条目。我使用本地网络SMTP服务器,它采用默认设置,没有网络凭据。现在我需要设置端口,ssl和网络凭据才能通过Gmail发送。

这是我的WriteTo部分......

 "WriteTo": [      
      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "C:/log/log-{Date}.json",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
          "fileSizeLimitBytes": 2147483648,
          "retainedFileCountLimit": 180,
          "restrictedToMinimumLevel": "Verbose"
        }
      },
      {
        "Name": "Email",
        "Args": {
          "connectionInfo": {
            "FromEmail": "{email address}",
            "ToEmail": "{email address}",
            "MailServer": "smtp.gmail.com",
            "EmailSubject": "Fatal Error",
            "NetworkCredentials": {
              "userName": "{gmailuser}@gmail.com",
              "password": "{gmailPassword}"
            },
            "Port": 587,
            "EnableSsl" : true
          },          
          "restrictedToMinimumLevel": "Verbose"
        }
      }
    ]
  },

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

将您的端口号更改为465,它应该适合您。以下是有关gmail smtp设置的一些信息:https://www.lifewire.com/what-are-the-gmail-smtp-settings-1170854

我使用的是Core 2.0,并且无法使用serilog电子邮件接收器来处理appsettings.json文件,但我确实通过在program.cs文件中设置配置来实现它,如下所示:

var logger = new LoggerConfiguration()
.WriteTo.RollingFile(
    pathFormat: "..\\..\\log\\AppLog.Web-{Date}.txt",
    outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] [{EventId}] {Message}{NewLine}{Exception}"
)
.WriteTo.Email(new EmailConnectionInfo
    {
        FromEmail = appConfigs.Logger.EmailSettings.FromAddress,
        ToEmail = appConfigs.Logger.EmailSettings.ToAddress,
        MailServer = "smtp.gmail.com",
        NetworkCredentials = new NetworkCredential {
            UserName = appConfigs.Logger.EmailSettings.Username,
            Password = appConfigs.Logger.EmailSettings.Password
        },
        EnableSsl = true,
        Port = 465,
        EmailSubject = appConfigs.Logger.EmailSettings.EmailSubject
    },
    outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}",
    batchPostingLimit: 10
    , restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error
)
.CreateLogger();