| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- // Copyright The OpenTelemetry Authors
- // SPDX-License-Identifier: Apache-2.0
- #ifdef _WIN32
- # include <gtest/gtest.h>
- # include <map>
- # include <set>
- # include <string>
- # define OPENTELEMETRY_ATTRIBUTE_TIMESTAMP_PREVIEW
- # include "opentelemetry/exporters/etw/etw_logger_exporter.h"
- # include "opentelemetry/sdk/trace/simple_processor.h"
- using namespace OPENTELEMETRY_NAMESPACE;
- using namespace opentelemetry::exporter::etw;
- // The ETW provider ID is {4533CB59-77E2-54E9-E340-F0F0549058B7}
- const char *kGlobalProviderName = "OpenTelemetry-ETW-TLD";
- /**
- * @brief Logger test with name and unstructured text
- * {
- * "Timestamp": "2021-09-30T16:40:40.0820563-07:00",
- * "ProviderName": "OpenTelemetry-ETW-TLD",
- * "Id": 2,
- * "Message": null,
- * "ProcessId": 23180,
- * "Level": "Always",
- * "Keywords": "0x0000000000000000",
- * "EventName": "Log",
- * "ActivityID": null,
- * "RelatedActivityID": null,
- * "Payload": {
- * "Name": "test",
- * "SpanId": "0000000000000000",
- * "Timestamp": "2021-09-30T23:40:40.066411500Z",
- * "TraceId": "00000000000000000000000000000000",
- * "_name": "Log",
- * "body": "This is test message",
- * "severityNumber": 5,
- * "severityText": "DEBUG"
- * }
- * }
- */
- TEST(ETWLogger, LoggerCheckWithBody)
- {
- std::string providerName = kGlobalProviderName; // supply unique instrumentation name here
- exporter::etw::LoggerProvider lp;
- const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"};
- auto logger = lp.GetLogger(providerName, schema_url);
- Properties attribs = {{"attrib1", 1}, {"attrib2", 2}};
- EXPECT_NO_THROW(
- logger->EmitLogRecord(opentelemetry::logs::Severity::kDebug, "This is test log body"));
- }
- /**
- * @brief Logger Test with structured attributes
- *
- * Example Event for below test:
- * {
- * "Timestamp": "2021-09-30T15:04:15.4227815-07:00",
- * "ProviderName": "OpenTelemetry-ETW-TLD",
- * "Id": 1,
- * "Message": null,
- * "ProcessId": 33544,
- * "Level": "Always",
- * "Keywords": "0x0000000000000000",
- * "EventName": "Log",
- * "ActivityID": null,
- * "RelatedActivityID": null,
- * "Payload": {
- * "Name": "test",
- * "SpanId": "0000000000000000",
- * "Timestamp": "2021-09-30T22:04:15.066411500Z",
- * "TraceId": "00000000000000000000000000000000",
- * "_name": "Log",
- * "attrib1": 1,
- * "attrib2": 2,
- * "body": "",
- * "severityNumber": 5,
- * "severityText": "DEBUG"
- * }
- * }
- *
- */
- TEST(ETWLogger, LoggerCheckWithAttributes)
- {
- std::string providerName = kGlobalProviderName; // supply unique instrumentation name here
- exporter::etw::LoggerProvider lp;
- const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"};
- auto logger = lp.GetLogger(providerName, schema_url);
- // Log attributes
- Properties attribs = {{"attrib1", 1}, {"attrib2", 2}};
- EXPECT_NO_THROW(logger->EmitLogRecord(opentelemetry::logs::Severity::kDebug,
- opentelemetry::common::MakeAttributes(attribs)));
- }
- /**
- * @brief Logger Test with structured attributes
- *
- * Example Event for below test:
- * {
- * "Timestamp": "2024-06-02T15:04:15.4227815-07:00",
- * "ProviderName": "OpenTelemetry-ETW-TLD",
- * "Id": 1,
- * "Message": null,
- * "ProcessId": 37696,
- * "Level": "Always",
- * "Keywords": "0x0000000000000000",
- * "EventName": "table1",
- * "ActivityID": null,
- * "RelatedActivityID": null,
- * "Payload": {
- * "SpanId": "0000000000000000",
- * "Timestamp": "2021-09-30T22:04:15.066411500Z",
- * "TraceId": "00000000000000000000000000000000",
- * "_name": "table1",
- * "attrib1": 1,
- * "attrib2": "value2",
- * "body": "This is a debug log body",
- * "severityNumber": 5,
- * "severityText": "DEBUG"
- * }
- * }
- *
- */
- TEST(ETWLogger, LoggerCheckWithTableNameMappings)
- {
- std::string providerName = kGlobalProviderName; // supply unique instrumentation name here
- std::map<std::string, std::string> tableNameMappings = {{"name1", "table1"}, {"name2", "table2"}};
- exporter::etw::TelemetryProviderOptions options = {{"enableTableNameMappings", true},
- {"tableNameMappings", tableNameMappings}};
- exporter::etw::LoggerProvider lp{options};
- auto logger = lp.GetLogger(providerName, "name1");
- // Log attributes
- Properties attribs = {{"attrib1", 1}, {"attrib2", "value2"}};
- EXPECT_NO_THROW(
- logger->Debug("This is a debug log body", opentelemetry::common::MakeAttributes(attribs)));
- }
- /**
- * @brief Logger Test with structured attributes
- *
- * Example Event for below test:
- * {
- * "Timestamp": "2024-06-02T15:04:15.4227815-07:00",
- * "ProviderName": "OpenTelemetry-ETW-TLD",
- * "Id": 1,
- * "Message": null,
- * "ProcessId": 37696,
- * "Level": "Always",
- * "Keywords": "0x0000000000000000",
- * "EventName": "table1",
- * "ActivityID": null,
- * "RelatedActivityID": null,
- * "Payload": {
- * "SpanId": "0000000000000000",
- * "Timestamp": "2021-09-30T22:04:15.066411500Z",
- * "TraceId": "00000000000000000000000000000000",
- * "_name": "table1",
- * "tiemstamp1": "2025-02-20T19:18:11.048166700Z",
- * "attrib2": "value2",
- * "body": "This is a debug log body",
- * "severityNumber": 5,
- * "severityText": "DEBUG"
- * }
- * }
- *
- */
- TEST(ETWLogger, LoggerCheckWithTimestampAttributes)
- {
- std::string providerName = kGlobalProviderName; // supply unique instrumentation name here
- std::set<std::string> timestampAttributes = {{"timestamp1"}};
- exporter::etw::TelemetryProviderOptions options = {{"timestampAttributes", timestampAttributes}};
- exporter::etw::LoggerProvider lp{options};
- auto logger = lp.GetLogger(providerName, "name1");
- // Log attributes
- Properties attribs = {{"timestamp1", 133845526910481667ULL}, {"attrib2", "value2"}};
- EXPECT_NO_THROW(
- logger->Debug("This is a debug log body", opentelemetry::common::MakeAttributes(attribs)));
- }
- #endif // _WIN32
|