diff --git a/packages/ctl/ctl.js b/packages/ctl/ctl.js index 3966abb8..9e9e27d5 100755 --- a/packages/ctl/ctl.js +++ b/packages/ctl/ctl.js @@ -43,7 +43,11 @@ function formatOutputColored(output) { let info = ""; if (output.type === "log") { let level = output.level; - if (level === "Info") { + if (level === "Script") { + level = chalk.bold.greenBright(level); + } else if (level === "Verbose") { + level = chalk.bold.gray(level); + } else if (level === "Info") { level = chalk.bold.blueBright(level); } else if (output.level === "Warning") { level = chalk.bold.yellowBright(level); diff --git a/packages/lib/factorio/server.js b/packages/lib/factorio/server.js index 842bb1f7..658e5a15 100644 --- a/packages/lib/factorio/server.js +++ b/packages/lib/factorio/server.js @@ -318,13 +318,15 @@ function parseOutput(line, source) { // A seconds output has two different kinds of formats: The first is a // log level and source location and has a format of // "Level File.cpp:123: message" - const secLogRegex = /^(\w+) (\w+\.cpp:\d+): (.*)$/; + // "Script @/path/to/file.lua:123: message" + // "Script =(command):123: message" + const secLogRegex = /^(\w+) ((\w+\.cpp:\d+)|([@=].*?:\d+)): (.*)$/; let secLogMatch = secLogRegex.exec(secContent); if (secLogMatch) { output.type = "log"; output.level = secLogMatch[1]; output.file = secLogMatch[2]; - output.message = secLogMatch[3]; + output.message = secLogMatch[5]; // The other possibility is that the content is a generic message } else { diff --git a/packages/web_ui/src/components/InstanceViewPage.jsx b/packages/web_ui/src/components/InstanceViewPage.jsx index 91c51d33..5e0057d6 100644 --- a/packages/web_ui/src/components/InstanceViewPage.jsx +++ b/packages/web_ui/src/components/InstanceViewPage.jsx @@ -83,7 +83,11 @@ function formatOutputColored(output, key) { let info = ""; if (output.type === "log") { let level = output.level; - if (level === "Info") { + if (level === "Script") { + level = {level}; + } else if (level === "Verbose") { + level = {level}; + } else if (level === "Info") { level = {level}; } else if (output.level === "Warning") { level = {level}; diff --git a/packages/web_ui/src/index.css b/packages/web_ui/src/index.css index 246613cb..f1ad3417 100644 --- a/packages/web_ui/src/index.css +++ b/packages/web_ui/src/index.css @@ -118,6 +118,16 @@ body { color: #808080; } +.instance-console .factorio-script { + font-weight: bold; + color: #49c33c; +} + +.instance-console .factorio-verbose { + font-weight: bold; + color: #888888; +} + .instance-console .factorio-info { font-weight: bold; color: #4646ea; diff --git a/test/lib/factorio/lines.js b/test/lib/factorio/lines.js index d5ced40e..aeba4b9d 100644 --- a/test/lib/factorio/lines.js +++ b/test/lib/factorio/lines.js @@ -143,6 +143,51 @@ let testLines = new Map([ message: "Saving finished", }, ], + [ + " 1.277 Script @/srv/clusterio/instances/test/temp/currently-playing/modules/example/test.lua:7: " + + "Example log line.", + { + format: "seconds", + time: "1.277", + type: "log", + level: "Script", + file: "@/srv/clusterio/instances/test/temp/currently-playing/modules/example/test.lua:7", + message: "Example log line.", + }, + ], + [ + " 1.277 Script @C:\\My Cluster\\temp\\current-save\\file.lua:7: Contrived :12: example", + { + format: "seconds", + time: "1.277", + type: "log", + level: "Script", + file: "@C:\\My Cluster\\temp\\current-save\\file.lua:7", + message: "Contrived :12: example", + }, + ], + [ + " 344.683 Script =(command):1: test", + { + format: "seconds", + time: "344.683", + type: "log", + level: "Script", + file: "=(command):1", + message: "test", + }, + ], + [ + " 0.751 Verbose ModManager.cpp:554: Time to load mods: 0.746762", + { + format: "seconds", + time: "0.751", + type: "log", + level: "Verbose", + file: "ModManager.cpp:554", + message: "Time to load mods: 0.746762", + }, + ], ]); module.exports = {