Forráskód Böngészése

Logging, minor refactoring

Craig Fletcher 5 hónapja
szülő
commit
25d74c862f
5 módosított fájl, 101 hozzáadás és 27 törlés
  1. 1 0
      src/defaults.js
  2. 15 14
      src/index.js
  3. 6 12
      src/lib.js
  4. 79 0
      src/logging.js
  5. 0 1
      src/processors.js

+ 1 - 0
src/defaults.js

@@ -62,6 +62,7 @@ export const opts = {
   outDir: "dist/",
   runDir: process.cwd(),
   cacheDir: ".cache",
+  logLevel: "info",
   defaultTemplate: "default",
   include: {
     styles: [{ pattern: "~/.rhedyn/styles/*.scss" }],

+ 15 - 14
src/index.js

@@ -3,16 +3,17 @@
 import * as defaultConfig from "./defaults.js"
 import { getConfig, processFiles } from "./lib.js"
 import { performance } from "node:perf_hooks"
-
+import { getLogger } from "./logging.js"
 const startTime = performance.now()
 const { opts, tasks } = await getConfig() || { ...defaultConfig }
-console.info(`[Start] Processing ${tasks.length} tasks`)
-console.info(`[Info] Running directory: ${opts.runDir}`)
-console.info(`[Info] Output directory: ${opts.outDir}`)
+const log = getLogger(opts.logLevel)
+log.info(`Processing ${tasks.length} tasks`)
+log.debug(`Running directory: ${opts.runDir}`)
+log.debug(`Output directory: ${opts.outDir}`)
 if (opts.cacheDir) {
-  console.info(`[Info] Cache directory: ${opts.cacheDir}`)
+  log.debug(`Cache directory: ${opts.cacheDir}`)
 } else {
-  console.warn("[Warn] Cache disabled")
+  log.warn("Cache disabled")
 }
 async function runTask(meta, task) {
   const allResults = await processFiles(task, meta)
@@ -32,17 +33,17 @@ const taskRunner = tasks.reduce(
   async (metaPromise, task) => {
     const meta = await metaPromise
     const startTime = performance.now()
-    console.group(`[Task] ${task.name}`)
-    console.log(`[Start] patterns: ${JSON.stringify(task.inputFiles)}`)
-    if (meta.opts.debug) {
-      console.log(task.name, "in meta", JSON.stringify(meta, null, 2))
-    }
+    log.group(`[Task] ${task.name}`)
+    log.trace(`patterns: ${JSON.stringify(task.inputFiles)}`)
+    log.trace(`meta: ${JSON.stringify(meta, null, 2)}`)
+    log.trace(`task: ${JSON.stringify(task, null, 2)}`)
     const { taskResult, cachedResults, processedResults } = await runTask(meta, task)
     const endTime = performance.now()
     const timeTaken = (endTime - startTime)
     const hrTime = timeTaken > 1000 ? `${Number.parseFloat(timeTaken / 1000).toFixed(2)}s` : `${Number.parseFloat(timeTaken).toFixed(2)}ms`
-    console.log(`[Done] processed: ${processedResults.length} | from cache: ${cachedResults.length} | ${hrTime}`)
-    console.groupEnd()
+    const filesWritten = processedResults.reduce((acc, cur) => acc + cur.path.length, 0)
+    log.info(`written: ${filesWritten} | processed: ${processedResults.length} | from cache: ${cachedResults.length} | ${hrTime}`)
+    log.groupEnd()
     return taskResult
   },
   Promise.resolve({ opts }),
@@ -51,4 +52,4 @@ await taskRunner
 const endTime = performance.now()
 const timeTaken = (endTime - startTime)
 const hrTime = timeTaken > 1000 ? `${Number.parseFloat(timeTaken / 1000).toFixed(2)}s` : `${Number.parseFloat(timeTaken).toFixed(2)}ms`
-console.log(`[Done] ${tasks.length} tasks in ${hrTime}`)
+log.info(`Completed ${tasks.length} tasks in ${hrTime}`)

+ 6 - 12
src/lib.js

@@ -12,6 +12,7 @@ import {
 import fs from "node:fs/promises"
 import path from "path"
 import process from "node:process"
+import { getLogger } from "./logging.js"
 
 export async function getConfig() {
   const configPath = path.join(process.cwd(), "rhedyn.config.js")
@@ -37,7 +38,7 @@ export async function processFiles(config, meta) {
   const outputDir = config.outputDir || ""
   const configPathDeps = config.deps?.paths || []
   const configStateDeps = config.deps?.state || []
-
+  const log = getLogger(meta.opts.logLevel)
   return await Promise.all(
     filesToProcess.map(async filePath => {
       const fileOutputPath = path.join(
@@ -49,11 +50,6 @@ export async function processFiles(config, meta) {
         ),
       )
 
-      if (meta.opts.debug) {
-        console.log("in filePath", filePath)
-        console.log("out fileOutputPath", fileOutputPath)
-      }
-
       const fileOutputDir = path.dirname(fileOutputPath)
       const exists = await fileExists(fileOutputDir)
       if (!exists) {
@@ -77,10 +73,10 @@ export async function processFiles(config, meta) {
         )
 
         if (cache && cache.hit) {
-          console.log(`[Info] Loaded cache for ${filePath}`)
+          log.debug(`Loaded cache for ${filePath}`)
           return { ...cache.taskResult, fromCache: true }
         }
-        console.log(`[Info] Cache miss for ${filePath} (${cache.reason})`)
+        log.debug(`Cache miss for ${filePath} (${cache.reason})`)
       }
 
       const state = meta.opts.cacheDir
@@ -101,17 +97,15 @@ export async function processFiles(config, meta) {
         })
       }
 
-      if (meta.opts.debug) {
-        console.log(filePath, "out detail", detail)
-        console.log(filePath, "out result", result)
-      }
       const taskRef = ref ? slugifyString(ref) : slugifyString(fileOutputPath)
       const taskResult = {
         detail,
         path: written ? result : [fileOutputPath.replace(meta.opts.outDir, "")],
         ref: taskRef,
       }
+      log.debug(`Wrote ${taskResult.path.length} files for ${filePath}`)
       if (meta.opts.cacheDir) {
+        log.debug(`Updating cache for ${filePath}`)
         const processorPathDeps = processorDeps?.paths || []
         const processorStateDeps = processorDeps?.state || []
         await updateCache(

+ 79 - 0
src/logging.js

@@ -0,0 +1,79 @@
+function logMessage(label) {
+  return (message) => {
+    console[label](`[${label}] ${message}`)
+  }
+}
+
+function noop() {
+}
+
+export function getLogger(logLevel = "info") {
+  switch(logLevel) {
+    case 6:
+    case "trace":
+      return {
+        group: console.group,
+        groupEnd: console.groupEnd,
+        trace: console.trace,
+        debug: logMessage("debug"),
+        info: logMessage("info"),
+        warn: logMessage("warn"),
+        error: logMessage("error"),
+      }
+    case "debug":
+      return {
+        group: console.group,
+        groupEnd: console.groupEnd,
+        trace: noop,
+        debug: logMessage("debug"),
+        info: logMessage("info"),
+        warn: logMessage("warn"),
+        error: logMessage("error"),
+      }
+    case 4:
+    case "info":
+      return {
+        group: console.group,
+        groupEnd: console.groupEnd,
+        trace: noop,
+        debug: noop,
+        info: logMessage("info"),
+        warn: logMessage("warn"),
+        error: logMessage("error"),
+      }
+    case 3:
+    case "warn":
+      return {
+        group: console.group,
+        groupEnd: console.groupEnd,
+        trace: noop,
+        debug: noop,
+        info: noop,
+        warn: logMessage("warn"),
+        error: logMessage("error"),
+      }
+    case 2:
+    case "error":
+      return {
+        group: console.group,
+        groupEnd: console.groupEnd,
+        trace: noop,
+        debug: noop,
+        info: noop,
+        warn: noop,
+        error: logMessage("error"),
+      }
+    case 1:
+    case "silent":
+      return {
+        group: noop,
+        groupEnd: noop,
+        trace: noop,
+        debug: noop,
+        info: noop,
+        warn: noop,
+        error: noop,
+      }
+
+  }
+}

+ 0 - 1
src/processors.js

@@ -5,7 +5,6 @@ import {
   getCleanPath,
   getHref,
   slugifyString,
-  stripFileExtension,
 } from "./util.js"
 import fs from "fs/promises"
 import handlebars from "handlebars"