bugfixing & add smbd_journald
[logparse.git] / logparse / load_parsers.py
index 44651fcff5b118b335760deb635a2a60796f3b02..9520583a3e517702639d9ff0a054ad4590f83819 100644 (file)
@@ -1,3 +1,5 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 """
 A basic "plugin loader" implementation which searches for default packaged and
 user-supplied parser modules and verifies them so they can be executed by
@@ -5,8 +7,8 @@ logparse.interface. The requirements for parser modules and classes are
 specified in the docstring of the Parser class.
 
 Classes in this module:
-    Parser          Base class that every parser should inherit
-    ParserLoader    Class used internally by logparse.interface to load parsers
+    - `Parser`:         Base class that every parser should inherit
+    - `ParserLoader`:   Class used internally by `interface.py` to load parsers
 """
 
 import importlib
@@ -35,7 +37,7 @@ class Parser():
     logparse.formatting.Section object.
     """
 
-    def __init__(self, name=None, path=None, info=None, deprecated=False):
+    def __init__(self, name=None, path=None, info=None, deprecated=False, successor=""):
         """
         The following variables can be set to display information about the
         parser. The object `self.logger` can be used as for outputting messages
@@ -47,6 +49,7 @@ class Parser():
         self.info = dict(info) if info else None
         self.logger = logging.getLogger(__name__)
         self.deprecated = deprecated
+        self.successor = successor
 
     def load(self):
         """
@@ -113,7 +116,7 @@ class ParserLoader:
             parser_module = spec.loader.load_module(spec.name)
             return self._validate_module(parser_module)
         except Exception as e:
-            logger.debug("Couldn't find parser {0} in {1}: {2}".format(pattern, self.path, str(e)))
+            logger.debug("Couldn't find parser {0} in {1}".format(pattern, self.path))
             return None
 
     def _search_default(self, pattern):
@@ -155,6 +158,9 @@ class ParserLoader:
             if None in get_type_hints(c):
                 logger.warning("Parser class {0} in {1} contains a null-returning parse_log() method".format(c.__class__.__name__, c.__file__))
                 continue
+            parser_obj = c()
+            if parser_obj.deprecated:
+                logger.warning("Parser {0} is deprecated - use {1} instead".format(parser_obj.name, parser_obj.successor))
             logger.debug("Found parser {0}.{1}".format(c.__module__, c.__class__.__name__))
             available_parsers.append(c())