public async Task LogFilteringTest()
        {
            // add a test log record
            var          utcnow        = DateTime.UtcNow.Date;
            var          mysqlLogStore = new SqlServerLogStore(() => utcnow);
            const string appPath       = "###rather_not_existing_application_path2###";

            var logrec = new LogRecord {
                LoggerName              = "TestLogger",
                ApplicationPath         = appPath,
                LogLevel                = LogRecord.ELogLevel.Error,
                TimeUtc                 = DateTime.UtcNow,
                ProcessId               = 123,
                ThreadId                = 456,
                Server                  = "TestServer",
                Identity                = "TestIdentity",
                CorrelationId           = Guid.NewGuid().ToString(),
                Message                 = "Test log message to store in the log",
                ExceptionMessage        = "Test exception log message",
                ExceptionType           = "TestException",
                ExceptionAdditionalInfo = "Additinal info for the test exception",
                AdditionalFields        = new Dictionary <String, Object>
                {
                    { "Host", "testhost.com" },
                    { "LoggedUser", "testloggeduser" },
                    { "HttpStatusCode", "200.1" },
                    { "Url", "http://testhost.com" },
                    { "Referer", "http://prevtesthost.com" },
                    { "ClientIP", null },
                    { "RequestData", "test test test" },
                    { "ResponseData", null },
                    { "ServiceName", "TestService" },
                    { "ServiceDisplayName", "Test service generating logs" },
                    { "NotExisting", null }
                },
                PerformanceData = new Dictionary <String, float>
                {
                    { "CPU", 2.0f },
                    { "Memory", 20000000f }
                }
            };

            // add log
            await mysqlLogStore.AddLogRecordAsync(logrec);

            var searchResults = await mysqlLogStore.FilterLogsAsync(new LogSearchCriteria {
                FromUtc         = DateTime.UtcNow.AddMinutes(-10),
                ToUtc           = DateTime.UtcNow.AddMinutes(10),
                ApplicationPath = appPath,
                Levels          = new[] { LogRecord.ELogLevel.Error, LogRecord.ELogLevel.Info },
                Limit           = 10,
                Offset          = 0,
                Server          = "TestServer",
                Keywords        = new KeywordsParsed()
                {
                    Url = "http://testhost.com"
                }
            });

            Assert.NotNull(searchResults.FoundItems);
            var foundItems = searchResults.FoundItems.ToArray();

            Assert.Equal(1, foundItems.Length);
            var logrec2 = foundItems[0];

            Assert.Equal(logrec.LoggerName, logrec2.LoggerName);
            Assert.Equal(logrec.ApplicationPath, logrec2.ApplicationPath);
            Assert.Equal(logrec.LogLevel, logrec2.LogLevel);
            Assert.Equal(logrec.TimeUtc.ToShortDateString(), logrec2.TimeUtc.ToShortDateString());
            Assert.Equal(logrec.ProcessId, logrec2.ProcessId);
            Assert.Equal(logrec.ThreadId, logrec2.ThreadId);
            Assert.Equal(logrec.Server, logrec2.Server);
            Assert.Equal(logrec.Identity, logrec2.Identity);
            Assert.Equal(logrec.CorrelationId, logrec2.CorrelationId);
            Assert.Equal(logrec.Message, logrec2.Message);
            Assert.Equal(logrec.ExceptionMessage, logrec2.ExceptionMessage);
            Assert.Equal(logrec.ExceptionType, logrec2.ExceptionType);
            Assert.Equal(logrec.ExceptionAdditionalInfo, logrec2.ExceptionAdditionalInfo);
            Assert.Equal(logrec.AdditionalFields["Host"], logrec2.AdditionalFields["Host"]);
            Assert.Equal(logrec.AdditionalFields["LoggedUser"], logrec2.AdditionalFields["LoggedUser"]);
            Assert.Equal(logrec.AdditionalFields["HttpStatusCode"], logrec2.AdditionalFields["HttpStatusCode"]);
            Assert.Equal(logrec.AdditionalFields["Url"], logrec2.AdditionalFields["Url"]);
            Assert.Equal(logrec.AdditionalFields["Referer"], logrec2.AdditionalFields["Referer"]);
            Assert.Equal(logrec.AdditionalFields["RequestData"], logrec2.AdditionalFields["RequestData"]);
            Assert.Equal(logrec.AdditionalFields["ServiceName"], logrec2.AdditionalFields["ServiceName"]);
            Assert.Equal(logrec.AdditionalFields["ServiceDisplayName"], logrec2.AdditionalFields["ServiceDisplayName"]);
        }