Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Stherm 16 posts 86 karma points
    Dec 06, 2019 @ 20:31
    Stherm
    0

    How to setup seriLog.sinks.email with network credential

    Hi, I'm trying to set up Serilog to send email + file logging. I use mailjet as my email server and I'm not able to set it up correctly with networkcredentials. Here is my config (with personnal data removed).

    <add key="serverUrl" value="localhost"/>
    <add key="serilog:using:Email" value="Serilog.Sinks.Email" />
    <add key="serilog:write-to:Email.fromEmail" value="emailfrom"/>
    <add key="serilog:write-to:Email.toEmail" value="emailto" />
    <add key="serilog:write-to:Email.mailServer" value="in-v3.mailjet.com" />
    
    <add key="serilog:enrich:with-property:environment" value="Localhost" />
    <add key="serilog:write-to:Email.port" value="587"/>
    <add key="serilog:write-to:Email.networkCredentials" value="'username':'username' 'password':'password'"/>
    
    <add key="serilog:write-to:Email.EnableSsl" value="true"/>
    <add key="serilog:write-to:Email.mailSubject" value="[{environment} - {MachineName}]" />
    <add key="serilog:write-to:Email.outputTemplate" value="{Timestamp:yyyy-MM-dd  HH:mm:ss}:: [{SourceContext} {NewLine}{Level:u3} - {Message:lj}{NewLine}{Exception}{SourceContext}]" />
    <add key="serilog:write-to:Email.restrictedToMinimumLevel" value="Error" />
    

    I don,t knw what I'm doing wrong with this. If i use another smtp (Email.mailServer) that doesn't need credentials, it works, but i can't use this one in production.

  • Alex 22 posts 105 karma points
    Jun 02, 2020 @ 04:21
    Alex
    0

    hi, did you find how to provide credentials for Email logging? I have the same issue.

  • Frans de Jong 532 posts 1778 karma points MVP 2x c-trib
    Jul 02, 2020 @ 15:26
    Frans de Jong
    0

    I'm just trying the same and no luck...

  • Frans de Jong 532 posts 1778 karma points MVP 2x c-trib
    Feb 01, 2021 @ 10:10
    Frans de Jong
    1

    For future reference:

    I've used the Nlog sink and setup the emails in there.

    We used the following config settings: Serilog.user.config:

      <add key="serilog:using:NLog" value="Serilog.Sinks.NLog" />
        <add key="serilog:write-to:NLog.restrictedToMinimumLevel" value="Error" />
        <add key="serilog:write-to:NLog.outputTemplate" value="{Message:lj}{NewLine}{Timestamp:yyyy-MM-dd HH:mm:ss,fff} [P{ProcessId}/D{AppDomainId}/T{ThreadId}] {Log4NetLevel} {SourceContext}{NewLine}{Exception}" />
    

    Web.config: We use a appsetting to check on what environment the error is thrown <add key="Environment" value="Environment" />

     <nlog>
    <targets>
      <target name="errormail" type="Mail" layout="${exception} on ${appsetting:Environment} - ${message} " subject="Error on Site name ${appsetting:Environment} environment" to="[email protected]" useSystemNetMailSettings="true" />
    </targets>
    <rules>
      <logger name="*" minlevel="Info" writeTo="errormail" />
    </rules>
    

    Register the nlog config in configsections:

        <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
    

    Hope this will help anyone.

  • Remko 106 posts 261 karma points
    Jun 02, 2021 @ 10:15
    Remko
    0

    For someone who likes to use Serilog in combination with Serilog.Sinks.Email (nuget package to install)

    Make sure SMTP is configured in web.config like this:

    <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network host="127.0.0.1" userName="username" password="password" />
      </smtp>
    </mailSettings>
    

    Add three configuration variables to appsettings:

    <add key="minimumLoggingLevel" value="information" />     
    <add key="exceptionsToMail" value="[email protected]" />
    <add key="exceptionsSubject" value="Something went wrong on test.nl" />
    

    Then simply add this to Initialize method of application component:

     public void Initialize()
            {  
                var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
                string toMail = ConfigurationManager.AppSettings["exceptionsToMail"];
                string subject = ConfigurationManager.AppSettings["exceptionsSubject"];
    
                var logLevelSetting = ConfigurationManager.AppSettings["minimumLoggingLevel"]; //Warning, Debug, Information, etc
    
                const bool ignoreCase = true; //this is to clarify the function of the boolean second parameter in the TryParse
                if (!Enum.TryParse(logLevelSetting, ignoreCase, out LogEventLevel minimumLevel))
                {
                    minimumLevel = LogEventLevel.Information;//set to this level if the config setting is missing or doesn't match a valid enumeration
                }
    
                var levelSwitch = new LoggingLevelSwitch { MinimumLevel = minimumLevel };
    
                Log.Logger = new LoggerConfiguration()
                .MinimalConfiguration()
                .ReadFromConfigFile()
                .ReadFromUserConfigFile()
                .MinimumLevel.ControlledBy(levelSwitch)
                .WriteTo.Email(new EmailConnectionInfo
                 {
                     FromEmail = smtpSection.From,
                     ToEmail = toMail,
                     MailServer = smtpSection.Network.Host,
                     NetworkCredentials = new NetworkCredential
                     {
                         UserName = smtpSection.Network.UserName,
                         Password = smtpSection.Network.Password
                     },
                     EnableSsl = smtpSection.Network.EnableSsl,
                     Port = smtpSection.Network.Port,
                     EmailSubject = subject
                 }, restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error, batchPostingLimit: 1)
                .CreateLogger();
            }
    
  • Neil 4 posts 74 karma points
    19 days ago
    Neil
    0

    For anyone still looking for a solution to this;

    We ended up downloading the Serilog.Sinks.Email source code from the GitHub repo and making a couple of changes to add a username and password property to the EmailConnectionInfo class. We then plumbed this into the rest of the code.

    This then allowed us to add our username and password for SMTP authentication to the serilog.user.config file in a straightforward manner.

    <add key="serilog:write-to:Email.username" value="[username]"/>
    <add key="serilog:write-to:Email.password" value="[password]"/>
    

    Then just reference your edited Serilog.Sinks.Email project where you need it and all seems to work OK (This was using Postmark's SMTP server).

    This was our brute force approach to solving our immediate issue as we couldn't waste any more time trying to work out how to fill the in the networkCredentials property from the config file.

    Just to add that the issue we found with Remko's solution (although it worked straight away), was that custom logging from our own code stopped being added to the Umbraco logs alltogether. I believe this is because the code is effectively overwriting the default Serilog logger with the line starting:

    Log.Logger = new LoggerConfiguration(){ }
    

    And so diverting all custom logging to email but not writing anything to the Umbraco log files. What we actually needed is for logs (errors in particular) to be appended to both the Umbraco log files AND sent by email.

Please Sign in or register to post replies

Write your reply to:

Draft