Skip to content

Commit

Permalink
feat: improve logging setup (#261)
Browse files Browse the repository at this point in the history
Signed-off-by: Federico Bond <federicobond@gmail.com>
  • Loading branch information
federicobond authored Jan 27, 2024
1 parent 15ce8f9 commit ccbff2c
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 3 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ client.get_boolean_flag("my-flag", False, flag_evaluation_options=options)

### Logging

Logging customization is not yet available in the Python SDK.
The OpenFeature SDK logs to the `openfeature` logger using the `logging` package from the Python Standard Library.

### Named clients

Expand Down
14 changes: 13 additions & 1 deletion openfeature/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
from openfeature.provider.no_op_provider import NoOpProvider
from openfeature.provider.provider import AbstractProvider

logger = logging.getLogger("openfeature")

GetDetailCallable = typing.Union[
typing.Callable[
[str, bool, typing.Optional[EvaluationContext]], FlagResolutionDetails[bool]
Expand Down Expand Up @@ -313,6 +315,12 @@ def evaluate_flag_details(
return flag_evaluation

except OpenFeatureError as err:
logger.exception(
"Error %s while evaluating flag with key: '%s'",
err.error_code,
flag_key,
)

error_hooks(flag_type, hook_context, err, reversed_merged_hooks, hook_hints)

return FlagEvaluationDetails(
Expand All @@ -325,6 +333,10 @@ def evaluate_flag_details(
# Catch any type of exception here since the user can provide any exception
# in the error hooks
except Exception as err: # pragma: no cover
logger.exception(
"Unable to correctly evaluate flag with key: '%s'", flag_key
)

error_hooks(flag_type, hook_context, err, reversed_merged_hooks, hook_hints)

error_message = getattr(err, "error_message", str(err))
Expand Down Expand Up @@ -363,7 +375,7 @@ def _create_provider_evaluation(
)

if not self.provider:
logging.info("No provider configured, using no-op provider.")
logger.info("No provider configured, using no-op provider.")
self.provider = NoOpProvider()

get_details_callables: typing.Mapping[FlagType, GetDetailCallable] = {
Expand Down
4 changes: 3 additions & 1 deletion openfeature/hook/hook_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from openfeature.flag_evaluation import FlagEvaluationDetails, FlagType
from openfeature.hook import Hook, HookContext, HookType

logger = logging.getLogger("openfeature")


def error_hooks(
flag_type: FlagType,
Expand Down Expand Up @@ -128,5 +130,5 @@ def _execute_hook_checked(
getattr(hook, hook_method.value)(**kwargs),
)
except Exception: # pragma: no cover
logging.error(f"Exception when running {hook_method.value} hooks")
logger.exception(f"Exception when running {hook_method.value} hooks")
return None

0 comments on commit ccbff2c

Please sign in to comment.