Skip to content

Commit c9fcfa1

Browse files
authored
Set log levels with strings (#18)
1 parent d82d0f5 commit c9fcfa1

File tree

3 files changed

+86
-9
lines changed

3 files changed

+86
-9
lines changed

pytest.ini

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[pytest]
2+
addopts = -rs -v
3+
log_cli = true
4+
log_cli_level = warning

src/opentelemetry/launcher/configuration.py

+49-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,17 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from logging import DEBUG, ERROR, basicConfig, getLogger
15+
from logging import (
16+
CRITICAL,
17+
DEBUG,
18+
ERROR,
19+
INFO,
20+
NOTSET,
21+
WARNING,
22+
basicConfig,
23+
getLevelName,
24+
getLogger,
25+
)
1626
from typing import Optional
1727

1828
from environs import Env
@@ -31,6 +41,7 @@
3141
from opentelemetry.trace import get_tracer_provider, set_tracer_provider
3242

3343
_env = Env()
44+
_logger = getLogger(__name__)
3445

3546
_DEFAULT_OTEL_EXPORTER_OTLP_SPAN_ENDPOINT = "ingest.lightstep.com:443"
3647
_DEFAULT_OTEL_EXPORTER_OTLP_METRIC_ENDPOINT = (
@@ -58,16 +69,14 @@
5869
"telemetry.sdk.version": __version__,
5970
},
6071
)
61-
_OTEL_LOG_LEVEL = _env.int("OTEL_LOG_LEVEL", ERROR)
72+
_OTEL_LOG_LEVEL = _env.str("OTEL_LOG_LEVEL", "ERROR")
6273
_OTEL_EXPORTER_OTLP_SPAN_INSECURE = _env.bool(
6374
"OTEL_EXPORTER_OTLP_SPAN_INSECURE", False
6475
)
6576
_OTEL_EXPORTER_OTLP_METRIC_INSECURE = _env.bool(
6677
"OTEL_EXPORTER_OTLP_METRIC_INSECURE", False
6778
)
6879

69-
_logger = getLogger(__name__)
70-
7180

7281
class InvalidConfigurationError(Exception):
7382
"""
@@ -83,12 +92,13 @@ def configure_opentelemetry(
8392
service_version: str = _LS_SERVICE_VERSION,
8493
propagator: list = _OTEL_PROPAGATORS,
8594
resource_labels: str = _OTEL_RESOURCE_LABELS,
86-
log_level: int = _OTEL_LOG_LEVEL,
95+
log_level: str = _OTEL_LOG_LEVEL,
8796
span_exporter_endpoint_insecure: bool = _OTEL_EXPORTER_OTLP_SPAN_INSECURE,
8897
metric_exporter_endpoint_insecure: bool = (
8998
_OTEL_EXPORTER_OTLP_METRIC_INSECURE
9099
),
91100
):
101+
# pylint: disable=too-many-locals
92102
"""
93103
Configures OpenTelemetry with Lightstep environment variables
94104
@@ -127,8 +137,16 @@ def configure_opentelemetry(
127137
"telemetry.sdk.language": "python",
128138
"telemetry.sdk.version": "0.9b0",
129139
}`
130-
log_level (int): OTEL_LOG_LEVEL, an int value that indicates the log
131-
level. Defaults to `logging.ERROR`.
140+
log_level (str): OTEL_LOG_LEVEL, one of:
141+
142+
- `NOTSET` (0)
143+
- `DEBUG` (10)
144+
- `INFO` (20)
145+
- `WARNING` (30)
146+
- `ERROR` (40)
147+
- `CRITICAL` (50)
148+
149+
Defaults to `logging.ERROR`.
132150
span_exporter_endpoint_insecure (bool):
133151
OTEL_EXPORTER_OTLP_SPAN_INSECURE, a boolean value that indicates if
134152
an insecure channel is to be used to send spans to the satellite.
@@ -139,6 +157,28 @@ def configure_opentelemetry(
139157
satellite. Defaults to `False`.
140158
"""
141159

160+
log_levels = {
161+
"NOTSET": NOTSET,
162+
"DEBUG": DEBUG,
163+
"INFO": INFO,
164+
"WARNING": WARNING,
165+
"ERROR": ERROR,
166+
"CRITICAL": CRITICAL,
167+
}
168+
169+
log_level = log_level.upper()
170+
171+
if log_level not in log_levels.keys():
172+
173+
message = (
174+
"Invalid configuration: invalid log_level value."
175+
"It must be one of {}.".format(", ".join(log_levels.keys()))
176+
)
177+
_logger.error(message)
178+
raise InvalidConfigurationError(message)
179+
180+
log_level = log_levels[log_level]
181+
142182
basicConfig(level=log_level)
143183

144184
_logger.debug("configuration")
@@ -151,7 +191,7 @@ def configure_opentelemetry(
151191
"service_version": service_version,
152192
"propagator": propagator,
153193
"resource_labels": resource_labels,
154-
"log_level": log_level,
194+
"log_level": getLevelName(log_level),
155195
"span_exporter_endpoint_insecure": span_exporter_endpoint_insecure,
156196
"metric_exporter_endpoint_insecure": metric_exporter_endpoint_insecure,
157197
}.items():
@@ -230,7 +270,7 @@ def configure_opentelemetry(
230270

231271
get_tracer_provider().resource = Resource(resource_labels)
232272

233-
if log_level == DEBUG:
273+
if log_level >= DEBUG:
234274
get_tracer_provider().add_span_processor(
235275
BatchExportSpanProcessor(ConsoleSpanExporter())
236276
)

tests/test_configuration.py

+33
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from unittest.mock import patch, ANY
1717
from time import sleep
1818
from sys import version_info
19+
from logging import DEBUG, WARNING
1920

2021
from opentelemetry.launcher.configuration import (
2122
configure_opentelemetry, InvalidConfigurationError
@@ -84,3 +85,35 @@ def test_metadata(self, mock_otlp_span_exporter):
8485
credentials=ANY,
8586
metadata=(("lightstep-access-token", "a" * 104),),
8687
)
88+
89+
def test_log_level(self):
90+
91+
with self.assertLogs(level=DEBUG):
92+
configure_opentelemetry(
93+
service_name="service_123",
94+
access_token="a" * 104,
95+
log_level="DEBUG",
96+
)
97+
98+
with self.assertRaises(AssertionError):
99+
with self.assertLogs(level=WARNING):
100+
configure_opentelemetry(
101+
service_name="service_123",
102+
access_token="a" * 104,
103+
log_level="WARNING",
104+
)
105+
106+
with self.assertLogs(level=DEBUG):
107+
configure_opentelemetry(
108+
service_name="service_123",
109+
access_token="a" * 104,
110+
log_level="DeBuG",
111+
)
112+
113+
with self.assertRaises(AssertionError):
114+
with self.assertLogs(level=WARNING):
115+
configure_opentelemetry(
116+
service_name="service_123",
117+
access_token="a" * 104,
118+
log_level="WaRNiNG",
119+
)

0 commit comments

Comments
 (0)