tests-integration/Elastic.NLog.Targets.IntegrationTests/LoggingToDataStreamTests.cs (56 lines of code) (raw):

using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using Elastic.Channels.Diagnostics; using Elastic.Clients.Elasticsearch; using Elastic.CommonSchema; using FluentAssertions; using Xunit; using Xunit.Abstractions; namespace NLog.Targets.Elastic.IntegrationTests { public class LoggingToDataStreamTests : TestBase { public LoggingToDataStreamTests(LoggingCluster cluster, ITestOutputHelper output) : base(cluster, output) { } private IDisposable CreateLogger( out NLog.Logger logger, out NLog.LogFactory logFactory, out string @namespace, out WaitHandle waitHandle, out IChannelDiagnosticsListener listener ) => base.CreateLogger(out logger, out logFactory, out @namespace, out waitHandle, out listener, (cfg) => { cfg.DataStreamType = "x"; cfg.DataStreamSet = "dotnet"; var nodesUris = string.Join(",", Client.ElasticsearchClientSettings.NodePool.Nodes.Select(n => n.Uri.ToString()).ToArray()); cfg.NodeUris = nodesUris; cfg.NodePoolType = ElasticPoolType.Static; }); // ReSharper disable once UnusedMember.Local private enum MyEnum { Success, Failure } [Fact] public async Task LogsEndUpInCluster() { using var _ = CreateLogger(out var logger, out var provider, out var @namespace, out var waitHandle, out var listener); var dataStream = $"x-dotnet-{@namespace}"; logger.Error("an error occurred {Status}", MyEnum.Failure); if (!waitHandle.WaitOne(TimeSpan.FromSeconds(10))) throw new Exception($"No flush occurred in 10 seconds: {listener}", listener.ObservedException); listener.PublishSuccess.Should().BeTrue("{0}", listener); listener.ObservedException.Should().BeNull(); await Client.Indices.RefreshAsync(dataStream); var response = await Client.SearchAsync<EcsDocument>(new SearchRequest(dataStream)); response.IsValidResponse.Should().BeTrue("{0}", response.DebugInformation); response.Total.Should().BeGreaterThan(0); var loggedError = response.Documents.First(); loggedError.Message.Should().Be("an error occurred Failure"); loggedError.Log.Should().NotBeNull(); loggedError.Log.Level.Should().Be("Error"); loggedError.Ecs.Version.Should().Be(EcsDocument.Version); loggedError.Ecs.Version.Should().NotStartWith("v"); loggedError.Labels.Should().ContainKey("Status"); loggedError.Labels["Status"].Should().Be("Failure"); } } }