Example #1
0
        private static string GetLog(
            LogFormatter formatter,
            string message,
            DirectSubmissionLogLevel level,
            Dictionary <string, string> properties)
        {
            var sb = new StringBuilder();

            formatter.FormatLog(
                sb,
                sb, // not used here
                DateTime.UtcNow,
                message,
                null,
                level.GetName(),
                exception: null,
                RenderPropertiesDelegate);
            return(sb.ToString());

            LogPropertyRenderingDetails RenderPropertiesDelegate(JsonTextWriter writer, in StringBuilder stringBuilder)
            {
                foreach (var pair in properties)
                {
                    writer.WritePropertyName(pair.Key);
                    writer.WriteValue(pair.Value);
                }

                return(new LogPropertyRenderingDetails(false, false, false, false, false, false, message));
            }
        }
 private ImmutableDirectLogSubmissionSettings(
     string host,
     string source,
     string globalTags,
     Uri intakeUrl,
     string apiKey,
     bool isEnabled,
     DirectSubmissionLogLevel minimumLevel,
     bool[] enabledIntegrations,
     List <string> validationErrors,
     List <string> enabledIntegrationNames,
     BatchingSinkOptions batchingOptions)
 {
     Host                    = host;
     Source                  = source;
     GlobalTags              = globalTags;
     IntakeUrl               = intakeUrl;
     ApiKey                  = apiKey;
     ValidationErrors        = validationErrors;
     EnabledIntegrationNames = enabledIntegrationNames;
     MinimumLevel            = minimumLevel;
     _enabledIntegrations    = enabledIntegrations;
     IsEnabled               = isEnabled;
     BatchingOptions         = batchingOptions;
 }
 internal DirectSubmissionNLogTarget(
     IDatadogSink sink,
     DirectSubmissionLogLevel minimumLevel,
     LogFormatter?formatter)
 {
     _sink         = sink;
     _formatter    = formatter;
     _minimumLevel = (int)minimumLevel;
 }
Example #4
0
 internal DirectSubmissionLogger(
     string name,
     IExternalScopeProvider?scopeProvider,
     IDatadogSink sink,
     LogFormatter?logFormatter,
     DirectSubmissionLogLevel minimumLogLevel)
 {
     _name            = name;
     _scopeProvider   = scopeProvider;
     _sink            = sink;
     _logFormatter    = logFormatter;
     _minimumLogLevel = (int)minimumLogLevel;
 }
 public static DirectSubmissionLog4NetAppender GetAppender(IDatadogSink sink, DirectSubmissionLogLevel level)
 => new(sink, level);
        public static ImmutableDirectLogSubmissionSettings Create(
            string?host,
            string?source,
            string?intakeUrl,
            string?apiKey,
            DirectSubmissionLogLevel minimumLevel,
            IDictionary <string, string> globalTags,
            ICollection <string> enabledLogShippingIntegrations,
            BatchingSinkOptions batchingOptions)
        {
            if (enabledLogShippingIntegrations.Count == 0)
            {
                // not trying to enable log submission, so don't log any errors and create a _null_ implementation
                return(CreateNullSettings());
            }

            var isEnabled        = true;
            var validationErrors = new List <string>();

            if (string.IsNullOrWhiteSpace(host))
            {
                isEnabled = false;
                validationErrors.Add($"Missing required setting '{ConfigurationKeys.DirectLogSubmission.Host}'.");
            }

            if (string.IsNullOrWhiteSpace(source))
            {
                isEnabled = false;
                validationErrors.Add($"Missing required setting '{ConfigurationKeys.DirectLogSubmission.Source}'.");
            }

            if (!Uri.TryCreate(intakeUrl, UriKind.Absolute, out var intakeUri))
            {
                isEnabled = false;
                validationErrors.Add($"The intake url '{intakeUrl}' was not a valid URL.");
            }

            if (string.IsNullOrWhiteSpace(apiKey))
            {
                isEnabled = false;
                validationErrors.Add($"Missing required settings '{ConfigurationKeys.ApiKey}'.");
            }

            var stringifiedTags         = StringifyGlobalTags(globalTags);
            var enabledIntegrations     = new bool[IntegrationRegistry.Ids.Count];
            var enabledIntegrationNames = new List <string>(SupportedIntegrations.Length);

            foreach (var integrationName in enabledLogShippingIntegrations)
            {
                if (!IntegrationRegistry.TryGetIntegrationId(integrationName, out var integrationId))
                {
                    validationErrors.Add(
                        "Unknown integration: " + integrationName +
                        ". Use a valid logs integration name: " +
                        string.Join(", ", SupportedIntegrations.Select(x => IntegrationRegistry.GetName(x))));
                    continue;
                }

                if (!SupportedIntegrations.Contains(integrationId))
                {
                    validationErrors.Add(
                        "Integration: " + integrationName + " is not a supported direct log submission integration. " +
                        "Use one of " + string.Join(", ", SupportedIntegrations.Select(x => IntegrationRegistry.GetName(x))));
                    continue;
                }

                if (!enabledIntegrations[(int)integrationId])
                {
                    enabledIntegrationNames.Add(IntegrationRegistry.GetName(integrationId));
                    enabledIntegrations[(int)integrationId] = true;
                }
            }

            return(new ImmutableDirectLogSubmissionSettings(
                       host: host ?? string.Empty,
                       source: source ?? string.Empty,
                       globalTags: stringifiedTags,
                       intakeUrl: intakeUri !,
                       apiKey: apiKey ?? string.Empty,
                       isEnabled: isEnabled,
                       minimumLevel: minimumLevel,
                       enabledIntegrations: enabledIntegrations,
                       validationErrors,
                       enabledIntegrationNames,
                       batchingOptions));
        }
 public TestLogEvent(DirectSubmissionLogLevel level, string message)
 {
     Level   = level;
     Message = message;
 }
 internal DirectSubmissionLog4NetLegacyAppender(IDatadogSink sink, DirectSubmissionLogLevel minimumLevel)
 {
     _sink         = sink;
     _minimumLevel = minimumLevel;
 }
 public static string GetName(this DirectSubmissionLogLevel logLevel)
 => logLevel switch
 {
Example #10
0
 public static DirectSubmissionNLogTarget CreateTarget(IDatadogSink sink, DirectSubmissionLogLevel minimumLevel)
 => new(sink, minimumLevel, LogSettingsHelper.GetFormatter());
 internal DirectSubmissionNLogTarget(IDatadogSink sink, DirectSubmissionLogLevel minimumLevel)
     : this(sink, minimumLevel, formatter : null)
 {
 }
 internal DirectSubmissionSerilogSink(IDatadogSink sink, DirectSubmissionLogLevel minimumLevel)
 {
     _sink = sink;
     _minimumLevel = (int)minimumLevel;
 }