File: logging_handler.py

package info (click to toggle)
python-influxdb-client 1.40.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 7,216 kB
  • sloc: python: 60,236; sh: 64; makefile: 53
file content (54 lines) | stat: -rw-r--r-- 1,885 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
Show the usage of influx with python native logging.

This is useful if you
* want to log to influx and a local file.
* want to set up influx logging in a project without specifying it in submodules
"""
import datetime
import logging
import time

from influxdb_client import InfluxLoggingHandler, WritePrecision, Point
from influxdb_client.client.write_api import SYNCHRONOUS

DATA_LOGGER_NAME = '…'


def setup_logger():
    """
    Set up data logger with the influx logging handler.

    This can happen in your core module.
    """
    influx_logging_handler = InfluxLoggingHandler(
        url="http://localhost:8086", token="my-token", org="my-org", bucket="my-bucket",
        client_args={'timeout': 30_000},  # optional configuration of the client
        write_api_args={'write_options': SYNCHRONOUS})  # optional configuration of the write api
    influx_logging_handler.setLevel(logging.DEBUG)

    data_logger = logging.getLogger(DATA_LOGGER_NAME)
    data_logger.setLevel(logging.DEBUG)
    data_logger.addHandler(influx_logging_handler)
    # feel free to add other handlers here.
    # if you find yourself writing filters e.g. to only log points to influx, think about adding a PR :)


def use_logger():
    """Use the logger. This can happen in any submodule."""
    # `data_logger` will have the influx_logging_handler attached if setup_logger was called somewhere.
    data_logger = logging.getLogger(DATA_LOGGER_NAME)
    # write a line yourself
    data_logger.debug(f"my-measurement,host=host1 temperature=25.3 {int(time.time() * 1e9)}")
    # or make use of the influxdb helpers like Point
    data_logger.debug(
        Point('my-measurement')
            .tag('host', 'host1')
            .field('temperature', 25.3)
            .time(datetime.datetime.utcnow(), WritePrecision.MS)
    )


if __name__ == "__main__":
    setup_logger()
    use_logger()