Extension destination for TacitusLogger that sends logs as emails using SMTP protocol.
Dependencies:
- NET Standard >= 1.3
- TacitusLogger >= 0.2.0
- jstedfast/MailKit >= 2.0.0
Attention:
TacitusLogger.Destinations.Email
is currently in Alpha phase. This means you should not use it in any production code.
The NuGet package:
PM> Install-Package TacitusLogger.Destinations.Email
Using builders:
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients("recipient@example.com")
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.Add()
.BuildLogger();
Directly:
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient, fromAddress, "recipient@example.com");
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
Using builders:
var recipients = new string[]
{
"recipient@example.com",
"recipient@example.com",
"recipient@example.com"
};
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients(recipients)
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.Add()
.BuildLogger();
Directly:
var recipients = new string[]
{
"recipient@example.com",
"recipient@example.com",
"recipient@example.com"
};
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient, fromAddress, recipients);
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
Using builders:
LogModelFunc<ICollection<string>> recipientsFunc = (logModel) =>
{
if (logModel.LogTypeIsIn(LogType.Error, LogType.Failure, LogType.Critical))
return new string[] { "recipient1@example.com" };
else
return new string[] { "recipient2@example.com" };
};
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients(recipientsFunc)
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.Add()
.BuildLogger();
Directly:
FactoryMethodRecipientProvider factoryMethodRecipientProvider = new FactoryMethodRecipientProvider((logModel) =>
{
if (logModel.LogTypeIsIn(LogType.Error, LogType.Failure, LogType.Critical))
return new string[] { "recipient1@example.com" };
else
return new string[] { "recipient2@example.com" };
});
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient, fromAddress, factoryMethodRecipientProvider);
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
Using builders:
IRecipientProvider customRecipientProvider = new Mock<IRecipientProvider>().Object;
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients(customRecipientProvider)
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.Add()
.BuildLogger();
Directly:
IRecipientProvider customRecipientProvider = new Mock<IRecipientProvider>().Object;
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient, fromAddress, customRecipientProvider);
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
Using builders:
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients("recipient@example.com")
.WithSmtpClient(mailKitSmtpClient, fromAddress)
.Add()
.BuildLogger();
Using builders:
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients("recipient@example.com")
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.WithSubject("Notification from logger $Source: $LogType - $Description")
.WithBody(customBodyTemplate)
.WithAttachment(customAttachmentTemplate)
.Add()
.BuildLogger();
Directly:
EmailListRecipientProvider emailListRecipientProvider = new EmailListRecipientProvider("recipient@example.com");
SimpleTemplateLogSerializer subjectTextSerializer = new SimpleTemplateLogSerializer("Notification from logger $Source: $LogType - $Description");
ExtendedTemplateLogSerializer bodyLogSerializer = new ExtendedTemplateLogSerializer(customBodyTemplate);
ExtendedTemplateLogSerializer attachmentLogSerializer = new ExtendedTemplateLogSerializer(customAttachmentTemplate);
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient,
fromAddress,
emailListRecipientProvider,
subjectTextSerializer,
bodyLogSerializer,
attachmentLogSerializer);
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
Using builders:
var jsonSerializerSettings = new JsonSerializerSettings();
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients("recipient@example.com")
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.WithSubject("Notification from logger $Source: $LogType - $Description")
.WithBody(customBodyTemplate, jsonSerializerSettings)
.WithAttachment(customAttachmentTemplate, jsonSerializerSettings)
.Add()
.BuildLogger();
Directly:
var jsonSerializerSettings = new JsonSerializerSettings();
EmailListRecipientProvider emailListRecipientProvider = new EmailListRecipientProvider("recipient@example.com");
SimpleTemplateLogSerializer subjectTextSerializer = new SimpleTemplateLogSerializer("Notification from logger $Source: $LogType - $Description");
ExtendedTemplateLogSerializer bodyLogSerializer = new ExtendedTemplateLogSerializer(customBodyTemplate, jsonSerializerSettings);
ExtendedTemplateLogSerializer attachmentLogSerializer = new ExtendedTemplateLogSerializer(customAttachmentTemplate, jsonSerializerSettings);
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient,
fromAddress,
emailListRecipientProvider,
subjectTextSerializer,
bodyLogSerializer,
attachmentLogSerializer);
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
Using builders:
ILogSerializer customSubjectSerializer = new Mock<ILogSerializer>().Object;
ILogSerializer customBodySerializer = new Mock<ILogSerializer>().Object;
ILogSerializer customAttachmentSerializer = new Mock<ILogSerializer>().Object;
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients("recipient@example.com")
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.WithSubject(customSubjectSerializer)
.WithBody(customBodySerializer)
.WithAttachment(customAttachmentSerializer)
.Add()
.BuildLogger();
Directly:
ILogSerializer customSubjectSerializer = new Mock<ILogSerializer>().Object;
ILogSerializer customBodySerializer = new Mock<ILogSerializer>().Object;
ILogSerializer customAttachmentSerializer = new Mock<ILogSerializer>().Object;
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailListRecipientProvider emailListRecipientProvider = new EmailListRecipientProvider("recipient@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient,
fromAddress,
emailListRecipientProvider,
customSubjectSerializer,
customBodySerializer,
customAttachmentSerializer);
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
Using builders:
var logger = LoggerBuilder.Logger()
.ForAllLogs()
.Email()
.WithRecipients("recipient@example.com")
.WithSmtpClient(mailKitSmtpClient, "sender@example.com")
.WithSubject(m => $"Notification from logger {m.Source}: {m.LogType} - {m.Description}")
.Add()
.BuildLogger();
Directly:
GeneratorFunctionLogSerializer subjectTextFunction = new GeneratorFunctionLogSerializer(m =>
{
return $"Notification from logger {m.Source}: {m.LogType} - {m.Description}";
});
MailboxAddress fromAddress = new MailboxAddress("sender", "sender@example.com");
EmailListRecipientProvider emailListRecipientProvider = new EmailListRecipientProvider("recipient@example.com");
EmailDestination emailDestination = new EmailDestination(mailKitSmtpClient,
fromAddress,
emailListRecipientProvider,
subjectTextFunction);
Logger logger = new Logger();
logger.AddLogDestinations(emailDestination);
TacitusLogger:
- TacitusLogger - A simple yet powerful .NET logging library.
Destinations:
- TacitusLogger.Destinations.MongoDb - Extension destination for TacitusLogger that sends logs to MongoDb database.
- TacitusLogger.Destinations.RabbitMq - Extension destination for TacitusLogger that sends logs to the RabbitMQ exchanges.
- TacitusLogger.Destinations.EntityFramework - Extension destination for TacitusLogger that sends logs to database using Entity Framework ORM.
- TacitusLogger.Destinations.Trace - Extension destination for TacitusLogger that sends logs to System.Diagnostics.Trace listeners.
Dependency injection:
- TacitusLogger.DI.Ninject - Extension for Ninject dependency injection container that helps to configure and add TacitusLogger as a singleton.
- TacitusLogger.DI.Autofac - Extension for Autofac dependency injection container that helps to configure and add TacitusLogger as a singleton.
- TacitusLogger.DI.MicrosoftDI - Extension for Microsoft dependency injection container that helps to configure and add TacitusLogger as a singleton.
Log contributors:
- TacitusLogger.Contributors.ThreadInfo - Extension contributor for TacitusLogger that generates additional info related to the thread on which the logger method was called.
- TacitusLogger.Contributors.MachineInfo - Extension contributor for TacitusLogger that generates additional info related to the machine on which the log was produced.