Exemple #1
0
        /// <inheritdoc />
        public async Task WriteAsync(ILogPayload payload, CancellationToken cancellationToken = default)
        {
            if (payload != null)
            {
                var legalityEvents = LogEventSinkFilter.Filter(payload, _sinkConfiguration).ToList();
                var logger         = AliyunSlsClientManager.GetSlsClient(payload.Name, out var logStoreName);

                if (logger == null || string.IsNullOrWhiteSpace(logStoreName))
                {
                    return;
                }

                var aliyunLogGroup = new AliyunLogGroup {
                    Source = payload.SourceType.FullName,
                    Topic  = payload.Name,
                };

                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 aliyunLogInfo = new AliyunLogInfo {
                        Contents = { { MessageBody, stringBuilder.ToString() } },
                        Time     = logEvent.Timestamp
                    };

                    if (logEvent.ExtraProperties.Count > 0)
                    {
                        foreach (var extra in logEvent.ExtraProperties)
                        {
                            var property = extra.Value;
                            if (property != null &&
                                0 != string.Compare(property.Name, MessageBody, StringComparison.OrdinalIgnoreCase))
                            {
                                aliyunLogInfo.Contents.Add(property.Name, property.Value.ToString());
                            }
                        }
                    }

                    aliyunLogGroup.Logs.Add(aliyunLogInfo);
                }

                var response = await logger.PostLogStoreLogsAsync(new PostLogsRequest(logStoreName, aliyunLogGroup));

                ProcessError(response);
            }
        }
        private static void RegisterAliyunSlsClients(AliyunSlsSinkOptions options)
        {
            if (!options.HasLegalNativeConfig(false))
            {
                throw new InvalidOperationException("There is no legal Alibaba Cloud (Aliyun) SLS native config.");
            }

            if (options.AliyunSlsNativeConfigs.Any())
            {
                foreach (var kvp in options.AliyunSlsNativeConfigs)
                {
                    AliyunSlsClientManager.SetSlsClient(kvp.Key, kvp.Value);
                }
            }
            else
            {
                AliyunSlsClientManager.SetSlsClient(Constants.DefaultClient,
                                                    options.LogStoreName, options.EndPoint, options.ProjectName, options.AccessKeyId, options.AccessKey,
                                                    true);
            }
        }