diff options
author | ahothan <ahothan@cisco.com> | 2017-08-22 17:41:16 -0700 |
---|---|---|
committer | ahothan <ahothan@cisco.com> | 2017-08-22 17:41:57 -0700 |
commit | 2d55474511a5057015e77547c326120c1649c0b7 (patch) | |
tree | e5f1db615655d73c9778d0499d7a312e8de2cc3e /nfvbench/fluentd.py | |
parent | 6c4e55c53c65b7e63c17c85367b4813443c5d942 (diff) |
NFVBENCH-6 Add support for sending logs to fluentd with fluentd client library
Change-Id: I1bc01b26f9e43f78c169b5fcd26247debcfe31bf
Signed-off-by: ahothan <ahothan@cisco.com>
Diffstat (limited to 'nfvbench/fluentd.py')
-rw-r--r-- | nfvbench/fluentd.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/nfvbench/fluentd.py b/nfvbench/fluentd.py new file mode 100644 index 0000000..683d4ce --- /dev/null +++ b/nfvbench/fluentd.py @@ -0,0 +1,47 @@ +# Copyright 2017 Cisco Systems, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from datetime import datetime +from fluent import sender +import logging + +class FluentLogHandler(logging.Handler): + '''This is a minimalist log handler for use with Fluentd + + Needs to be attached to a logger using the addHandler method. + It only picks up from every record: + - the formatted message (no timestamp and no level) + - the level name + - the runlogdate (to tie multiple run-related logs together) + The timestamp is retrieved by the fluentd library. + ''' + def __init__(self, tag, fluentd_ip='127.0.0.1', fluentd_port=24224): + logging.Handler.__init__(self) + self.tag = tag + self.formatter = logging.Formatter('%(message)s') + self.sender = sender.FluentSender(self.tag, port=fluentd_port) + self.start_new_run() + + def start_new_run(self): + '''Delimitate a new run in the stream of records with a new timestamp + ''' + self.runlogdate = str(datetime.now()) + + def emit(self, record): + data = { + "runlogdate": self.runlogdate, + "loglevel": record.levelname, + "message": self.formatter.format(record) + } + self.sender.emit(None, data) |