Я добавляю Страж к одной из моих целей в NLOG (4.6.4). Поскольку у нас иногда возникает многократный триггер ошибок, я создавал WhenRepeatedFilter, чтобы остановить повторяющиеся ошибки и регистрировать только 1 из них со счетчиком. Этот фильтр уже работает с моим mailtarget.
Когда я добавляю этот фильтр, также моя цель Sentry. Цель почты все еще работает, но цель Sentry перестает работать. Я добавляю неправильный путь?
Когда я пытаюсь изменить порядок целей, моя почтовая цель перестает работать, а Sentry работает.
LoggingConfiguration config = new LoggingConfiguration();
var WhenFilter = new WhenRepeatedFilter();
WhenFilter.Layout = "${message}";
WhenFilter.TimeoutSeconds = 600;
WhenFilter.Action = FilterResult.Ignore;
WhenFilter.IncludeFirst = false;
WhenFilter.FilterCountPropertyName = "filteredCount";
WhenFilter.FilterCountMessageAppendFormat = "\n\nIgnored: {0}";
//File log instellen
FileTarget fileTarget = new FileTarget();
fileTarget.FileName = Path.Combine(LogPath, "automate.log");
fileTarget.ArchiveFileName = Path.Combine(LogPath, "automate.{#####}.log");
fileTarget.ArchiveAboveSize = 512000; // 500kb
fileTarget.ArchiveNumbering = ArchiveNumberingMode.Sequence;
fileTarget.MaxArchiveFiles = 10;
fileTarget.ConcurrentWrites = true;
fileTarget.KeepFileOpen = false;
fileTarget.Layout = "${longdate} | ${level} | ${callsite} | ${event-properties:item=DebId} | ${event-properties:item=Gebruiker} | ${message}";
var BufferTarget = new BufferingTargetWrapper()
{
BufferSize = 100,
SlidingTimeout = false,
FlushTimeout = 5000,
Name = "BufferTarget",
OverflowAction = BufferingTargetWrapperOverflowAction.Flush,
WrappedTarget = fileTarget
};
config.AddTarget("file", BufferTarget);
LoggingRule ruleFile = new LoggingRule("*", LogLevel.Error, BufferTarget);
config.LoggingRules.Add(ruleFile);
//Mail log instellen
MailTarget mailTarget = new MailTarget();
config.AddTarget("mail", mailTarget);
mailTarget.Name = "mail";
[....]
mailTarget.AddNewLines = true;
mailTarget.Layout = "${longdate} | ${windows-identity} | ${event-properties:item=Versie} | ${level} | ${callsite} ${newline} ${event-properties:item=DebId} | ${event-properties:item=Bedrijf} | ${event-properties:item=Gebruiker} | Dubbele overgeslagen:${event-context:item=filteredCount}}${newline}${event-properties:item=Ips}${newline} ${message}${newline}${newline}Stacktrace: ${stacktrace}${newline}Callsite: ${callsite}${newline}Exception: ${exception}";
mailTarget.Subject = "NLog ${level} bij ${event-context:item=Bedrijf} (${event-context:item=DebId})";
if (GlobInfo.IsServer)
mailTarget.Subject = "NLog Server ${level} bij ${event-context:item=Bedrijf} (${event-context:item=DebId})";
LoggingRule ruleMail = new LoggingRule("*", LogLevel.Error, new LimitingTargetWrapper(mailTarget, 100, TimeSpan.FromMinutes(30)));
ruleMail.Filters.Add(WhenFilter);
config.LoggingRules.Add(ruleMail);
//Sentry
var SentryTarget = new SentryTarget();
SentryTarget.Name = "Sentry";
[....]
SentryTarget.MinimumEventLevel = LogLevel.Error.ToString();
SentryTarget.MinimumBreadcrumbLevel = LogLevel.Debug.ToString();
SentryTarget.Options.InitializeSdk = true;
SentryTarget.Options.ShutdownTimeoutSeconds = 5;
SentryTarget.Options.AddTag("App", GlobInfo.IsServer ? "Server" : "Client");
SentryTarget.Options.AttachStacktrace = true;
SentryTarget.Options.Release = GlobInfo.UpdBuildnr.ToString();
SentryTarget.Options.Environment = GlobInfo.UpdVersie;
SentryTarget.IncludeCallSite = true;
SentryTarget.IncludeCallSiteStackTrace = true;
SentryTarget.Layout = "${message}";
SentryTarget.Options.BeforeSend = BeforeSend;
LoggingRule ruleSen = new LoggingRule("*", LogLevel.Error, new LimitingTargetWrapper(SentryTarget, 100, TimeSpan.FromMinutes(30)));
ruleSen.Filters.Add(WhenFilter);
config.LoggingRules.Add(ruleSen);