diff --git a/config/gitlint/block_comment.py b/config/gitlint/block_comment.py
new file mode 100644
index 0000000..8f5b51f
--- /dev/null
+++ b/config/gitlint/block_comment.py
@@ -0,0 +1,57 @@
+import re
+from gitlint.rules import CommitRule, RuleViolation
+from gitlint.options import IntOption
+
+
+class BodyMaxLineLengthWithExceptions(CommitRule):
+    name = "body-max-line-length-with-exceptions"
+    id = "UC1"
+
+    options_spec = [IntOption("line-length", 80, "Max line length")]
+    line_length_violation_message = """Line exceeds max length ({0}>{1}).
+    It's possible you intended to use one of the following exceptions:
+    1. Put logs or shell script in a quoted section with triple quotes (''') before and after the section
+    2. Put a long link at the bottom in a footnote.  example: [1] https://my_long_link.com
+    Line that was too long:
+"""
+    tabs_violation_message = "Line contains hard tab characters (\\t)"
+
+    def validate(self, commit):
+        in_block_comment = False
+        for line in commit.message.body:
+            # allow a quoted string to be over the line limit
+            if (
+                line.startswith("'''")
+                or line.startswith('"""')
+                or line.startswith("```")
+            ):
+                in_block_comment = not in_block_comment
+
+            if in_block_comment:
+                continue
+
+            if "\t" in line:
+                return [RuleViolation(self.id, self.tabs_violation_message, line)]
+
+            # allow footnote url links to be as long as needed example
+            # [1] http://www.myspace.com
+            ret = re.match(r"^\[\d+\]:? ", line)
+            if ret is not None:
+                continue
+
+            # allow signed-off-by
+            if line.startswith("Signed-off-by:"):
+                continue
+
+            max_length = self.options["line-length"].value
+            if len(line) > max_length:
+                return [
+                    RuleViolation(
+                        self.id,
+                        self.line_length_violation_message.format(
+                            len(line), max_length
+                        ),
+                        line,
+                    )
+                ]
+        return None
