diff --git a/src/logging/LogFilter.ts b/src/logging/LogFilter.ts
new file mode 100644
index 00000000..83f71891
--- /dev/null
+++ b/src/logging/LogFilter.ts
@@ -0,0 +1,54 @@
+/*
+Copyright 2021 The Matrix.org Foundation C.I.C.
+
+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.
+*/
+
+
+export enum LogLevel {
+    All = 1,
+    Debug,
+    Detail,
+    Info,
+    Warn,
+    Error,
+    Fatal,
+    Off
+}
+
+export class LogFilter {
+    constructor(parentFilter) {
+        this._parentFilter = parentFilter;
+        this._min = null;
+    }
+
+    filter(item, children) {
+        if (this._parentFilter) {
+            if (!this._parentFilter.filter(item, children)) {
+                return false;
+            }
+        }
+        // neither our children or us have a loglevel high enough, filter out.
+        if (this._min !== null && !Array.isArray(children) && item.logLevel < this._min) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    /* methods to build the filter */
+    minLevel(logLevel) {
+        this._min = logLevel;
+        return this;
+    }
+}