diff --git a/src/pages/logs.tsx b/src/pages/logs.tsx
index 020f3ca43023316d9709d6d5b736f163d260d28a..936ba192f30e8061657efe7036aca888c34c077b 100644
--- a/src/pages/logs.tsx
+++ b/src/pages/logs.tsx
@@ -1,5 +1,6 @@
+import { useMemo, useState } from "react";
 import { useRecoilState } from "recoil";
-import { Button, Paper } from "@mui/material";
+import { Box, Button, MenuItem, Paper, Select, TextField } from "@mui/material";
 import { Virtuoso } from "react-virtuoso";
 import { useTranslation } from "react-i18next";
 import { atomLogData } from "../services/states";
@@ -10,6 +11,18 @@ const LogPage = () => {
   const { t } = useTranslation();
   const [logData, setLogData] = useRecoilState(atomLogData);
 
+  const [logState, setLogState] = useState("all");
+  const [filterText, setFilterText] = useState("");
+
+  const filterLogs = useMemo(() => {
+    return logData.filter((data) => {
+      return (
+        data.payload.includes(filterText) &&
+        (logState === "all" ? true : data.type.includes(logState))
+      );
+    });
+  }, [logData, logState, filterText]);
+
   return (
     <BasePage
       title={t("Logs")}
@@ -25,13 +38,50 @@ const LogPage = () => {
         </Button>
       }
     >
-      <Paper sx={{ boxShadow: 2, height: "100%" }}>
-        <Virtuoso
-          initialTopMostItemIndex={999}
-          data={logData}
-          itemContent={(index, item) => <LogItem value={item} />}
-          followOutput={"smooth"}
-        />
+      <Paper sx={{ boxSizing: "border-box", boxShadow: 2, height: "100%" }}>
+        <Box
+          sx={{
+            pt: 1,
+            mb: 0.5,
+            mx: "12px",
+            height: "36px",
+            display: "flex",
+            alignItems: "center",
+          }}
+        >
+          <Select
+            size="small"
+            autoComplete="off"
+            value={logState}
+            onChange={(e) => setLogState(e.target.value)}
+            sx={{ width: 120, mr: 1, '[role="button"]': { py: 0.65 } }}
+          >
+            <MenuItem value="all">ALL</MenuItem>
+            <MenuItem value="info">INFO</MenuItem>
+            <MenuItem value="warn">WARN</MenuItem>
+          </Select>
+
+          <TextField
+            hiddenLabel
+            fullWidth
+            size="small"
+            autoComplete="off"
+            variant="outlined"
+            placeholder="Filter conditions"
+            value={filterText}
+            onChange={(e) => setFilterText(e.target.value)}
+            sx={{ input: { py: 0.65, px: 1.25 } }}
+          />
+        </Box>
+
+        <Box height="calc(100% - 50px)">
+          <Virtuoso
+            initialTopMostItemIndex={999}
+            data={filterLogs}
+            itemContent={(index, item) => <LogItem value={item} />}
+            followOutput={"smooth"}
+          />
+        </Box>
       </Paper>
     </BasePage>
   );