diff --git a/cortex-js/src/index.ts b/cortex-js/src/index.ts
index 13a383371..5ba80c22b 100644
--- a/cortex-js/src/index.ts
+++ b/cortex-js/src/index.ts
@@ -7,6 +7,7 @@ import {
 import { getApp } from './app';
 import chalk from 'chalk';
 import { CortexUsecases } from './usecases/cortex/cortex.usecases';
+import { cleanLogs } from './utils/log';
 
 /**
  * Start the API server
@@ -18,6 +19,8 @@ export async function start(host?: string, port?: number) {
   const sPort = port || process.env.CORTEX_JS_PORT || defaultCortexJsPort;
 
   try {
+    // Clean log periodically
+    cleanLogs();
     await app.listen(sPort, sHost);
     const cortexUsecases = await app.resolve(CortexUsecases);
     await cortexUsecases.startCortex();
diff --git a/cortex-js/src/main.ts b/cortex-js/src/main.ts
index 1a43ca318..c87b40d31 100644
--- a/cortex-js/src/main.ts
+++ b/cortex-js/src/main.ts
@@ -4,6 +4,7 @@ import {
 } from '@/infrastructure/constants/cortex';
 import { getApp } from './app';
 import chalk from 'chalk';
+import { cleanLogs } from './utils/log';
 
 async function bootstrap() {
   const app = await getApp();
@@ -12,6 +13,8 @@ async function bootstrap() {
   const port = process.env.CORTEX_JS_PORT || defaultCortexJsPort;
 
   try {
+    // Clean logs periodically
+    cleanLogs();
     await app.listen(port, host);
     console.log(chalk.blue(`Started server at http://${host}:${port}`));
     console.log(
diff --git a/cortex-js/src/utils/log.ts b/cortex-js/src/utils/log.ts
new file mode 100644
index 000000000..e8bf72ffa
--- /dev/null
+++ b/cortex-js/src/utils/log.ts
@@ -0,0 +1,69 @@
+import { fileManagerService } from "@/infrastructure/services/file-manager/file-manager.service";
+import { existsSync, stat, unlink } from "fs";
+
+const logCleaningInterval: number = 120000
+let timeout: NodeJS.Timeout | undefined;
+
+export async function cleanLogs(
+  maxFileSizeBytes?: number | undefined,
+  daysToKeep?: number | undefined,
+): Promise<void> {
+  // clear existing timeout
+  // in case we rerun it with different values
+  if (timeout) clearTimeout(timeout)
+  timeout = undefined
+
+
+  console.log(
+    'Validating app logs. Next attempt in ',
+    logCleaningInterval
+  )
+
+  const size = maxFileSizeBytes ?? 1 * 1024 * 1024 // 1 MB
+  const days = daysToKeep ?? 7 // 7 days
+  const filePath = await fileManagerService.getLogPath()
+  // Perform log cleaning
+  const currentDate = new Date()
+  if (existsSync(filePath))
+  stat(filePath, (err, stats) => {
+    if (err) {
+      console.error('Error getting file stats:', err)
+      return
+    }
+
+    // Check size
+    if (stats.size > size) {
+      unlink(filePath, (err) => {
+        if (err) {
+          console.error('Error deleting log file:', err)
+          return
+        }
+        console.debug(
+          `Deleted log file due to exceeding size limit: ${filePath}`
+        )
+      })
+    } else {
+      // Check age
+      const creationDate = new Date(stats.ctime)
+      const daysDifference = Math.floor(
+        (currentDate.getTime() - creationDate.getTime()) /
+          (1000 * 3600 * 24)
+      )
+      if (daysDifference > days) {
+        unlink(filePath, (err) => {
+          if (err) {
+            console.error('Error deleting log file:', err)
+            return
+          }
+          console.debug(`Deleted old log file: ${filePath}`)
+        })
+      }
+    }
+  })
+
+  // Schedule the next execution with doubled delays
+  timeout = setTimeout(
+    () => this.cleanLogs(maxFileSizeBytes, daysToKeep),
+    logCleaningInterval
+  )
+}