logtail / logtail-python

Better Stack Python client
https://betterstack.com/logs
Other
36 stars 10 forks source link

LogtailHandler: implement logging.Handler.flush #26

Closed PetrHeinz closed 4 months ago

PetrHeinz commented 4 months ago

Implementing flush method on our handler.

The method should be implemented by subclasses of logging.Handler. It's called automatically during graceful termination. https://github.com/python/cpython/blob/8e8a4baf652f6e1cee7acde9d78c4b6154539748/Lib/logging/__init__.py#L1039-L1046

The method will enforce uploading the current buffer to Better Stack sooner than in flush_interval, and will wait until all data are sent to Better Stack.


Making check_interval configurable and decreasing the default value from 1s to 100ms, as it may have serious impact on short-running code (example project took ~1.3s to finish before this PR, now takes ~350ms).


It is now safe to terminate execution immediately (eg. using os._exit), if flush() is called before:

for handler in logger.handlers:
    handler.flush()

os._exit(os.EX_OK)
PetrHeinz commented 4 months ago

Seems that the 3.11 tests fail on master as well: https://github.com/logtail/logtail-python/actions/runs/9581314199/job/26417818292