fluent / fluent-logger-python

A structured logger for Fluentd (Python)
http://fluentd.org/
Other
444 stars 138 forks source link

Feature Request: Allow relativeCreated to be formatted as seconds instead of milliseconds #195

Open ecerulm opened 10 months ago

ecerulm commented 10 months ago

Python LogRecord has the attribute relativeCreated

Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded.

It's currently possible to use FluentRecordFormatter to include that in the fluent events

version: 1
formatters:
  fluent_fmt:
    '()': fluent.handler.FluentRecordFormatter
    format:
      "host.hostname": '%(hostname)s'
      "host.id": '%(hostname)s'
      "host.uptime": '%(relativeCreated)d'
      "log.logger": '%(name)s'
      "log.level": '%(levelname)s'
      "log.origin.file.name": '%(pathname)s'
      "log.origin.file.line": '%(lineno)d'
      "log.origin.function": '%(funcName)s'

but relativeCreated is in milliseconds, it would be very convenient to be able to convert that to seconds right in FluentRecordFormatter hence this feature request, please considering allowing something like

  "host.uptime": '%(relativeCreatedInSeconds)d'

were the relativeCreatedInSeconds would be something added by FluentRecordFormatter.

ecerulm commented 10 months ago

The workaround currently would be to add a uptime attribute to the LogRecords like this

old_factory = logging.getLogRecordFactory()

def record_factory(*args, **kwargs):
    record = old_factory(*args, **kwargs)
    record.uptime = record.relativeCreated/1000
    return record

logging.setLogRecordFactory(record_factory)

and the using that new uptime attribute in the LogRecords like this

version: 1
formatters:
  fluent_fmt:
    '()': fluent.handler.FluentRecordFormatter
    format:
      "host.uptime": '%(uptime)d'