В случаях, когда отправка в 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
Как использовать резервный вариант, если он не может отправить данные в CloudWatch (C#,AWS.Logger.NLog) ⇐ C#
Место общения программистов C#
1731913897
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}");
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79199001/how-to-use-a-fallback-when-it-cannot-send-data-to-cloudwatch-c-aws-logger-nlog[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия