Как использовать резервный вариант, если он не может отправить данные в CloudWatch (C#,AWS.Logger.NLog)C#

Место общения программистов C#
Ответить
Anonymous
 Как использовать резервный вариант, если он не может отправить данные в CloudWatch (C#,AWS.Logger.NLog)

Сообщение Anonymous »

В случаях, когда отправка в CloudWatch не удалась ни при каких обстоятельствах, вместо этого запишите в файл журнала.
Примечание: я попытался ввести неправильное значение конфигурации, но оно не попало в catch блок.
Я использовал библиотеку AWS.Logger.NLog (https://www.nuget.org/packages/AWS.Logger.NLog)
Спасибо большое. .
.

.

.
using Amazon.Runtime;
using NLog.AWS.Logger;
using NLog.Config;
using NLog.Layouts;
using NLog.Targets;
using NLog;
public class CloudWatchLogger
{
public CloudWatchLogger(CloudWatchLoggerReq req)
{
// Setup the NLog configuration
var config = new LoggingConfiguration();

// Add console target
config.AddRule(LogLevel.Trace, LogLevel.Fatal, new ConsoleTarget());

var awsTarget = new AWSTarget()
{
LogGroup = req.LogGroupName,
// (Optional) How often batches of log messages should be pushed to AWS CloudWatch
BatchPushInterval = TimeSpan.FromSeconds(3),
FlushTimeout = TimeSpan.FromSeconds(req.TimeoutSec),

// (Optional) Whether NLog should try create the log group if it does not exist or not
DisableLogGroupCreation = true,

// (Optional) The maximum number of log events that are kept in memory before being pushed to
// AWS CloudWatch
MaxQueuedMessages = 10000,

// (Optional) A string to prefix log stream names with
LogStreamNamePrefix = "Prefix",

// (Optional) A string to suffix log stream names with
LogStreamNameSuffix = "Suffix",

// (Optional) AWS credentials that should be used to log into AWS and access AWS CloudWatch
Credentials = new BasicAWSCredentials(req.Accesskey, req.SecretAccessKey),

// CloudWatch logs should be logged in. In this case it defaults to the AWS Profile's region
Region = req.Region,

// (Optional) Custom layout that should be used when formatting log messages
Layout = new SimpleLayout("${message}"),
LogStreamName = "${date:format=yyyyMMdd}",

// (Optional) Log System Error
//LibraryLogFileName = $"{req.PathFileLog}/Logs/aws-logger-erros.txt",
};

// Add AWS target and fallback file target
config.AddRule(LogLevel.Trace, LogLevel.Fatal, awsTarget);

// Add file target for fallback
var fileTarget = new FileTarget("file")
{
FileName = $"{req.PathFileLog}/Logs/Log_${{date:format=yyyyMMdd}}.txt",
Layout = new SimpleLayout("[${date}] ${message} ${exception}")
};
config.AddRule(LogLevel.Error, LogLevel.Fatal, fileTarget);

LogManager.Configuration = config;
}

//create logMessage
public static void LogMessageAsync(SendMessageCloudWatch req)
{
var log = LogManager.GetCurrentClassLogger();
string msg = string.Empty;
try
{
msg = req.msg;
log.Trace(msg);
}
catch (Exception ex)
{
//Failed to send log to AWS CloudWatch
string guid = System.Guid.NewGuid().ToString();
log.Error($"Req - {guid}: {msg}");
log.Error($"Res - {guid}: {ex}");
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ogger-nlog
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»