private static void RegisterClientViaConfiguration(TomatoLogSinkConfiguration configuration)
        {
            var flowType = configuration.GetRealFlowType();
            var client   = TomatoLogClientCreator.Create(flowType, configuration);

            TomatoClientManager.Set(client, flowType);
        }
        /// <inheritdoc />
        public async Task WriteAsync(ILogPayload payload, CancellationToken cancellationToken = default)
        {
            if (payload != null)
            {
                var legalityEvents = LogEventSinkFilter.Filter(payload, _sinkConfiguration).ToList();
                var logger         = TomatoClientManager.Get();

                if (logger == null)
                {
                    return;
                }

                foreach (var logEvent in legalityEvents)
                {
                    LogEventEnricherManager.Enricher(logEvent);
                    var stringBuilder = new StringBuilder();
                    using (var output = new StringWriter(stringBuilder, _formatProvider)) {
                        logEvent.RenderMessage(output, _sinkConfiguration.Rendering, _formatProvider);
                    }

                    var content = logEvent.ContextData?.ToString();

                    dynamic dynamicObj = null;

                    if (logEvent.ExtraProperties.Count > 0)
                    {
                        dynamicObj = new ExpandoObject();
                        foreach (var extra in logEvent.ExtraProperties)
                        {
                            var property = extra.Value;
                            if (property != null)
                            {
                                dynamicObj[property.Name] = property.Value.ToString();
                            }
                        }
                    }

                    await logger.WriteLogAsync(
                        logEvent.EventId.GetIntegerEventId(),
                        LogLevelSwitcher.Switch(logEvent.Level),
                        stringBuilder.ToString(),
                        content,
                        dynamicObj);
                }
            }
        }
        private static void RegisterClientsViaOptions(TomatoLogSinkOptions options)
        {
            var client = TomatoLogClientCreator.Create(options);

            TomatoClientManager.Set(client, options.FlowType);
        }