diff --git a/lib/apiserver/routers/smstools-config.js b/lib/apiserver/routers/smstools-config.js
index 2906067..17e2529 100644
--- a/lib/apiserver/routers/smstools-config.js
+++ b/lib/apiserver/routers/smstools-config.js
@@ -152,6 +152,7 @@ async function pageInstallConfig(req, res) {
 }
 
 function pageSmsdLog(req, res) {
+    // deprecated
     const maxLines = (req.params.maxLines || 200);
     childProcess.exec(`tail -n ${maxLines} /var/log/smsd/smsd.log | tac`, (err, stdout, stderr) => {
         res.json({
diff --git a/lib/apiserver/routers/smstools.js b/lib/apiserver/routers/smstools.js
index 32c02fc..a2d836a 100644
--- a/lib/apiserver/routers/smstools.js
+++ b/lib/apiserver/routers/smstools.js
@@ -1,5 +1,9 @@
+const childProcess = require('child_process');
 const express = require('express');
+const escapeQuotes = require('escape-quotes');
+
 const config = require('komodo-sdk/config');
+
 const smstoolsUtil = require('../../smstools-util');
 const smstoolsStatus = require('../../smstools-status');
 const smstoolsStatusParsed = require('../../smstools-status-parsed');
@@ -23,6 +27,22 @@ async function pageRestart(req, res) {
     res.json(await smstoolsUtil.restart());
 }
 
+function pageSmsdLog(req, res) {
+    const maxLines = (Number(req.query.max) || 200);
+    const keyword = req.query.keyword && req.query.keyword.trim() && escapeQuotes(req.query.keyword.trim(), '\'"&|*<>[];$');
+    const cmd = req.query.keyword ? `tail -n ${maxLines * 50} | grep ${keyword} | tail -n ${maxLines} | tac`
+        : `tail -n ${maxLines} /var/log/smsd/smsd.log | tac`;
+
+    childProcess.exec(cmd, (err, stdout, stderr) => {
+        res.json({
+            err,
+            stdout,
+            stderr,
+        });
+    });
+}
+
 router.get('/status', pageStatus);
 router.get('/status/raw', pageStatusRaw);
 router.get('/restart', pageRestart);
+router.get('/smsd-log', pageSmsdLog);
diff --git a/package-lock.json b/package-lock.json
index bf16bcb..1f2c777 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1055,11 +1055,18 @@
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
       "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
     },
+    "escape-quotes": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/escape-quotes/-/escape-quotes-1.0.2.tgz",
+      "integrity": "sha1-tIltSmz4LdWzP0m3E0CMY4D2zZc=",
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-      "dev": true
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
     },
     "eslint": {
       "version": "6.7.1",
diff --git a/package.json b/package.json
index df47a3a..950b5ed 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,7 @@
   },
   "dependencies": {
     "body-parser": "^1.19.0",
+    "escape-quotes": "^1.0.2",
     "express": "^4.17.1",
     "get-stdin": "^7.0.0",
     "komodo-center-messaging-client-lib": "git+http://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git",