簡體   English   中英

如何在 Serilog.Sinks.Email 中設置動態 EmailSubject

[英]How to set dynamic EmailSubject in Serilog.Sinks.Email

我在我的 Net 5 項目中使用 serilog,我想在發送 email 之前在代碼中動態設置主題。 我從 2.2.0 版中讀到這應該是可能的,但我找不到任何如何執行此操作的示例。

這是我的 serilog 設置

Log.Logger = new LoggerConfiguration()
                .WriteTo.File(path + "TTLog_" + time + ".txt")
                .WriteTo.Console(theme: SystemConsoleTheme.Literate)
                .WriteTo.Email(new EmailConnectionInfo {
                    FromEmail = FromEmail,
                    ToEmail = ToEmail,
                    MailServer = SMTP_Server,
                    NetworkCredentials = new NetworkCredential {
                        UserName = SMTP_Username,
                        Password = SMTP_Password
                    },

                    EnableSsl = false,
                    Port = SMTP_Port,
                    EmailSubject = "Test Subject",

                },
                outputTemplate: "[{Level:u4}] {Message}{NewLine}{Exception}{Timestamp}"
                ).CreateLogger();

在我的代碼中,我想在設置 LoggerConfiguration 后更新EmailSubject 我怎樣才能做到這一點?

根據評論中的要求更新:

Log.Logger = new LoggerConfiguration()
                .WriteTo.File(path + "TTLog_" + time + ".txt")
                .WriteTo.Console(theme: SystemConsoleTheme.Literate)
                .WriteTo.Email(new EmailConnectionInfo {
                    FromEmail = FromEmail,
                    ToEmail = ToEmail,
                    MailServer = SMTP_Server,
                    NetworkCredentials = new NetworkCredential {
                        UserName = SMTP_Username,
                        Password = SMTP_Password
                    },

                    EnableSsl = false,
                    Port = SMTP_Port,
                    EmailSubject = "{Msg}"
                },
                outputTemplate: "[{Level:u4}] {Message}{NewLine}{Exception}{Timestamp}"
                ).Enrich.FromLogContext()
            .CreateLogger();

那么如果我使用它它就可以工作,email 主題是“TT Log - Updated A”

string x = "A";
Serilog.Context.LogContext.PushProperty("Msg", "TT Log - Updated " + x);

但是如果我這樣做是行不通的,郵件主題是空的

string x = "A";
Log.Information("Test");
Serilog.Context.LogContext.PushProperty("Msg", "TT Log - Updated " + x);

如何從代碼中的任何位置動態設置 email 主題?

也許你可以試試serilog-sinks-map

示例代碼使用.Net 6

// Program.cs
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
    .Enrich.FromLogContext()
    .WriteTo.Map("Msg", "default msg", (msg, wt) => wt.Email(new EmailConnectionInfo()
    {
        MailServer = "smtp.gmail.com",
        Port = 465,
        EnableSsl = true,
        NetworkCredentials = new NetworkCredential("xxx.com", "xxxxx"),
        EmailSubject = msg,
        FromEmail = "xxx@gmail.com",
        ToEmail = "xxx@gmail.com",
    }))
    .CreateLogger();

然后,可以使用static方法Log進行測試。

Log.Fatal("Host terminated unexpectedly");        
Log.Fatal("Host terminated unexpectedly {Msg}", "Test Subject");
Log.Fatal("Host terminated unexpectedly {Msg}", "Test2 Subject");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM