Skip to content

Commit eed6572

Browse files
authored
Add example for Logs ostream exporter (#1992)
1 parent 95f6c66 commit eed6572

File tree

5 files changed

+143
-0
lines changed

5 files changed

+143
-0
lines changed

examples/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ endif()
2121
if(WITH_PROMETHEUS)
2222
add_subdirectory(prometheus)
2323
endif()
24+
if(WITH_LOGS_PREVIEW)
25+
add_subdirectory(logs_simple)
26+
endif()
2427
add_subdirectory(plugin)
2528
add_subdirectory(simple)
2629
add_subdirectory(batch)

examples/logs_simple/BUILD

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Copyright The OpenTelemetry Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
cc_binary(
5+
name = "example_logs_simple",
6+
srcs = [
7+
"main.cc",
8+
],
9+
tags = [
10+
"examples",
11+
"ostream",
12+
],
13+
deps = [
14+
"//api",
15+
"//examples/common/logs_foo_library:common_logs_foo_library",
16+
"//exporters/ostream:ostream_log_record_exporter",
17+
"//exporters/ostream:ostream_span_exporter",
18+
],
19+
)

examples/logs_simple/CMakeLists.txt

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Copyright The OpenTelemetry Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
if(DEFINED OPENTELEMETRY_BUILD_DLL)
5+
add_definitions(-DOPENTELEMETRY_BUILD_IMPORT_DLL)
6+
endif()
7+
8+
include_directories(${CMAKE_SOURCE_DIR}/exporters/ostream/include)
9+
10+
if(WITH_LOGS_PREVIEW)
11+
add_executable(example_logs_simple main.cc)
12+
target_link_libraries(example_logs_simple ${CMAKE_THREAD_LIBS_INIT}
13+
common_logs_foo_library)
14+
15+
if(DEFINED OPENTELEMETRY_BUILD_DLL)
16+
target_link_libraries(example_logs_simple opentelemetry_cpp)
17+
else()
18+
target_link_libraries(
19+
example_logs_simple opentelemetry_trace opentelemetry_logs
20+
opentelemetry_exporter_ostream_span opentelemetry_exporter_ostream_logs)
21+
endif()
22+
endif()

examples/logs_simple/README.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
# Simple Logs Example
3+
4+
In this example, the application in `main.cc` initializes an
5+
`OStreamLogRecordExporter` instance and registers a logger
6+
provider, as well as initializes a `StdoutSpanExporter` instance and registers a
7+
tracer provider from the [OpenTelemetry
8+
SDK](https://github.com/open-telemetry/opentelemetry-cpp).
9+
10+
The application then calls a `logs_foo_library` which has been instrumented
11+
using the [OpenTelemetry
12+
API](https://github.com/open-telemetry/opentelemetry-cpp/tree/main/api).
13+
Resulting logs and traces are directed to stdout.
14+
15+
See [CONTRIBUTING.md](../../CONTRIBUTING.md) for instructions on building and
16+
running the example.

examples/logs_simple/main.cc

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#ifdef ENABLE_LOGS_PREVIEW
5+
# include "opentelemetry/exporters/ostream/span_exporter_factory.h"
6+
# include "opentelemetry/sdk/trace/simple_processor_factory.h"
7+
# include "opentelemetry/sdk/trace/tracer_provider_factory.h"
8+
# include "opentelemetry/trace/provider.h"
9+
10+
# include "opentelemetry/exporters/ostream/log_record_exporter.h"
11+
# include "opentelemetry/logs/provider.h"
12+
# include "opentelemetry/sdk/logs/logger_provider_factory.h"
13+
# include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"
14+
15+
# ifdef BAZEL_BUILD
16+
# include "examples/common/logs_foo_library/foo_library.h"
17+
# else
18+
# include "logs_foo_library/foo_library.h"
19+
# endif
20+
21+
namespace logs_api = opentelemetry::logs;
22+
namespace logs_sdk = opentelemetry::sdk::logs;
23+
namespace logs_exporter = opentelemetry::exporter::logs;
24+
25+
namespace trace_api = opentelemetry::trace;
26+
namespace trace_sdk = opentelemetry::sdk::trace;
27+
namespace trace_exporter = opentelemetry::exporter::trace;
28+
29+
namespace
30+
{
31+
void InitTracer()
32+
{
33+
// Create ostream span exporter instance
34+
auto exporter = trace_exporter::OStreamSpanExporterFactory::Create();
35+
auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
36+
std::shared_ptr<trace_api::TracerProvider> provider =
37+
trace_sdk::TracerProviderFactory::Create(std::move(processor));
38+
39+
// Set the global trace provider
40+
trace_api::Provider::SetTracerProvider(provider);
41+
}
42+
43+
void CleanupTracer()
44+
{
45+
std::shared_ptr<trace_api::TracerProvider> none;
46+
trace_api::Provider::SetTracerProvider(none);
47+
}
48+
49+
void InitLogger()
50+
{
51+
// Create ostream log exporter instance
52+
auto exporter =
53+
std::unique_ptr<logs_sdk::LogRecordExporter>(new logs_exporter::OStreamLogRecordExporter);
54+
auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
55+
std::shared_ptr<logs_api::LoggerProvider> provider(
56+
logs_sdk::LoggerProviderFactory::Create(std::move(processor)));
57+
58+
// Set the global logger provider
59+
logs_api::Provider::SetLoggerProvider(provider);
60+
}
61+
62+
void CleanupLogger()
63+
{
64+
std::shared_ptr<logs_api::LoggerProvider> none;
65+
logs_api::Provider::SetLoggerProvider(none);
66+
}
67+
68+
} // namespace
69+
70+
int main()
71+
{
72+
InitTracer();
73+
InitLogger();
74+
foo_library();
75+
CleanupTracer();
76+
CleanupLogger();
77+
}
78+
#else
79+
int main()
80+
{
81+
return 0;
82+
}
83+
#endif // ENABLE_LOGS_PREVIEW

0 commit comments

Comments
 (0)