summaryrefslogtreecommitdiffstats
path: root/nfvbench/fluentd.py
diff options
context:
space:
mode:
authorahothan <ahothan@cisco.com>2017-08-22 17:41:16 -0700
committerahothan <ahothan@cisco.com>2017-08-22 17:41:57 -0700
commit2d55474511a5057015e77547c326120c1649c0b7 (patch)
treee5f1db615655d73c9778d0499d7a312e8de2cc3e /nfvbench/fluentd.py
parent6c4e55c53c65b7e63c17c85367b4813443c5d942 (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.py47
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)