diff --git a/client/src/addon_manager/commands/enable.ts b/client/src/addon_manager/commands/enable.ts
index f5f7775f7bb79b31e50290ebcacaf5d261a27b15..f71e8029da56281b6b72b55caba7ab11bd4c4702 100644
--- a/client/src/addon_manager/commands/enable.ts
+++ b/client/src/addon_manager/commands/enable.ts
@@ -44,12 +44,13 @@ export default async (context: vscode.ExtensionContext, message: Message) => {
         try {
             await addon.enable(folder);
         } catch (e) {
+            const message = `Failed to enable ${addon.name}!`;
+            localLogger.error(message, { report: false });
+            localLogger.error(e, { report: false });
             WebVue.sendNotification({
                 level: NotificationLevels.error,
-                message: `Failed to enable ${addon.name}!`,
+                message,
             });
-            localLogger.warn(`Failed to enable ${addon.name}`);
-            localLogger.warn(e);
             continue;
         }
         await setConfig([
diff --git a/client/src/addon_manager/commands/update.ts b/client/src/addon_manager/commands/update.ts
index 1727f6f44a00ad983716a1d7b42ab52409685632..13aed3b5414e652d6667d80338392cf436294586 100644
--- a/client/src/addon_manager/commands/update.ts
+++ b/client/src/addon_manager/commands/update.ts
@@ -4,6 +4,9 @@ import { git } from "../services/git.service";
 import { DiffResultTextFile } from "simple-git";
 import { WebVue } from "../panels/WebVue";
 import { NotificationLevels } from "../types/webvue";
+import { createChildLogger } from "../services/logging.service";
+
+const localLogger = createChildLogger("Update Addon");
 
 type Message = {
     data: {
@@ -16,9 +19,12 @@ export default async (context: vscode.ExtensionContext, message: Message) => {
     try {
         await addon.update();
     } catch (e) {
+        const message = `Failed to update ${addon.name}`;
+        localLogger.error(message, { report: false });
+        localLogger.error(e, { report: false });
         WebVue.sendNotification({
             level: NotificationLevels.error,
-            message: `Failed to update ${addon.name}!`,
+            message,
         });
     }
     await addon.setLock(false);
diff --git a/client/src/addon_manager/models/addon.ts b/client/src/addon_manager/models/addon.ts
index 61c16a808d75119dde9c115e6ff3173e12738df8..eae74d309fadda5184b58109e7927d65ee2f6f5b 100644
--- a/client/src/addon_manager/models/addon.ts
+++ b/client/src/addon_manager/models/addon.ts
@@ -90,7 +90,7 @@ export class Addon {
      */
     public checkIfEnabled(libraryPaths: string[]) {
         const regex = new RegExp(
-            `[\/\\\\]+sumneko.lua[\/\\\\]+addonManager[\/\\\\]+addons[\/\\\\]+${this.name}`,
+            `[/\\\\]+sumneko.lua[/\\\\]+addonManager[/\\\\]+addons[/\\\\]+${this.name}`,
             "g"
         );
 
@@ -190,7 +190,7 @@ export class Addon {
         )) ?? []) as string[];
 
         const regex = new RegExp(
-            `[\/\\\\]+sumneko.lua[\/\\\\]+addonManager[\/\\\\]+addons[\/\\\\]+${this.name}`,
+            `[/\\\\]+sumneko.lua[/\\\\]+addonManager[/\\\\]+addons[/\\\\]+${this.name}`,
             "g"
         );
         const index = librarySetting.findIndex((path) => regex.test(path));
diff --git a/client/src/addon_manager/panels/WebVue.ts b/client/src/addon_manager/panels/WebVue.ts
index 34d9b62c09c3a672ffe472dd7a648e9172d9e883..d0b28c031a78cbb50db010cd566c2f775d06efe5 100644
--- a/client/src/addon_manager/panels/WebVue.ts
+++ b/client/src/addon_manager/panels/WebVue.ts
@@ -250,7 +250,9 @@ export class WebVue {
     ) {
         return webview.onDidReceiveMessage((message: WebVueMessage) => {
             const command = message.command;
-            commandLogger.verbose(`Executing "${command}"`);
+            commandLogger.verbose(
+                `Executing "${command}" (${JSON.stringify(message)})`
+            );
 
             try {
                 commands[command](context, message);
diff --git a/client/src/addon_manager/registration.ts b/client/src/addon_manager/registration.ts
index ad976706636898113e44ce2052f1037d0240491c..97dc2b4a867962d4e5acc29fb40d1af1f77d5f3b 100644
--- a/client/src/addon_manager/registration.ts
+++ b/client/src/addon_manager/registration.ts
@@ -5,8 +5,7 @@ import VSCodeLogFileTransport from "./services/logging/vsCodeLogFileTransport";
 import { createChildLogger, logger } from "./services/logging.service";
 import dayjs from "dayjs";
 import RelativeTime from "dayjs/plugin/relativeTime";
-import { setupGit } from "./services/git.service";
-import { execSync } from "child_process";
+import { git, setupGit } from "./services/git.service";
 import { GIT_DOWNLOAD_URL } from "./config";
 import { NotificationLevels } from "./types/webvue";
 
@@ -20,63 +19,75 @@ export async function activate(context: vscode.ExtensionContext) {
     const isEnabled = globalConfig.get("enable") as boolean;
 
     if (!isEnabled) {
+        // NOTE: Will only log to OUTPUT, not to log file
         localLogger.info("Addon manager is disabled");
         return;
     }
 
-    try {
-        execSync("git --version");
-    } catch (e) {
-        vscode.window
-            .showErrorMessage(
-                "Git does not appear to be installed. Please install Git to use the addon manager",
-                "Disable Addon Manager",
-                "Visit Git Website"
-            )
-            .then((result) => {
-                switch (result) {
-                    case "Disable Addon Manager":
-                        globalConfig.update(
-                            "enable",
-                            false,
-                            vscode.ConfigurationTarget.Global
-                        );
-                        break;
-                    case "Visit Git Website":
-                        vscode.env.openExternal(
-                            vscode.Uri.parse(GIT_DOWNLOAD_URL)
-                        );
-                        break;
-                    default:
-                        break;
-                }
-            });
-        return;
-    }
+    const fileLogger = new VSCodeLogFileTransport(context.logUri, {
+        level: "debug",
+    });
 
-    // Register commands
+    // Register command to open addon manager
     context.subscriptions.push(
         vscode.commands.registerCommand("lua.addon_manager.open", async () => {
-            // Create log file transport and add to logger
-            const fileLogger = new VSCodeLogFileTransport(context.logUri, {
-                level: "debug",
-            });
-            const promiseFilelogger = await fileLogger.init();
-            context.subscriptions.push(promiseFilelogger);
-            logger.add(fileLogger);
-            await fileLogger.logStart();
+            // Set up file logger
+            if (!fileLogger.initialized) {
+                const disposable = await fileLogger.init();
+                context.subscriptions.push(disposable);
+                logger.info(
+                    `This session's log file: ${VSCodeLogFileTransport.currentLogFile}`
+                );
+                logger.add(fileLogger);
+                await fileLogger.logStart();
+            }
 
-            WebVue.render(context);
+            // Check if git is installed
+            if (!(await git.version()).installed) {
+                logger.error("Git does not appear to be installed!", {
+                    report: false,
+                });
+                vscode.window
+                    .showErrorMessage(
+                        "Git does not appear to be installed. Please install Git to use the addon manager",
+                        "Disable Addon Manager",
+                        "Visit Git Website"
+                    )
+                    .then((result) => {
+                        switch (result) {
+                            case "Disable Addon Manager":
+                                globalConfig.update(
+                                    "enable",
+                                    false,
+                                    vscode.ConfigurationTarget.Global
+                                );
+                                break;
+                            case "Visit Git Website":
+                                vscode.env.openExternal(
+                                    vscode.Uri.parse(GIT_DOWNLOAD_URL)
+                                );
+                                break;
+                            default:
+                                break;
+                        }
+                    });
+            }
 
+            // Set up git repository for fetching addons
             try {
-                await setupGit(context);
+                setupGit(context);
             } catch (e) {
+                const message =
+                    "Failed to set up Git repository. Please check your connection to GitHub.";
+                logger.error(message, { report: false });
+                logger.error(e, { report: false });
                 WebVue.sendNotification({
                     level: NotificationLevels.error,
-                    message:
-                        "Failed to set up Git repository. Please check your connection to GitHub.",
+                    message,
                 });
             }
+
+            WebVue.render(context);
         })
     );
 }
diff --git a/client/src/addon_manager/services/addonManager.service.ts b/client/src/addon_manager/services/addonManager.service.ts
index cced373667500f11e2048549cbb6114064fde597..2532f67b453852f76abbf6fe5949c28b27e41272 100644
--- a/client/src/addon_manager/services/addonManager.service.ts
+++ b/client/src/addon_manager/services/addonManager.service.ts
@@ -21,9 +21,13 @@ class AddonManager {
             await git.fetch();
             await git.pull();
         } catch (e) {
+            const message =
+                "Failed to fetch addons! Please check your connection to GitHub.";
+            localLogger.error(message, { report: false });
+            localLogger.error(e, { report: false });
             WebVue.sendNotification({
                 level: NotificationLevels.error,
-                message: `Failed to fetch addons! Please check your connection to GitHub.`,
+                message,
             });
         }
 
diff --git a/client/src/addon_manager/services/filesystem.service.ts b/client/src/addon_manager/services/filesystem.service.ts
index 5928741ec678e3b08dc681b931e8e0a60bf4ffd3..20ab57a6e1ef4c418607c7aef72d2193a27c5eb3 100644
--- a/client/src/addon_manager/services/filesystem.service.ts
+++ b/client/src/addon_manager/services/filesystem.service.ts
@@ -12,7 +12,9 @@ type ReadDirectoryOptions = {
 };
 
 namespace filesystem {
-
+    /** Get a string representation of a URI using UNIX separators
+     * @param uri The URI to get as a UNIX path string
+     */
     export function unixifyPath(uri: vscode.Uri): string {
         if (platform() === "win32") {
             return uri.path.substring(1);
@@ -91,7 +93,9 @@ namespace filesystem {
     export async function createDirectory(uri: vscode.Uri) {
         return vscode.workspace.fs
             .createDirectory(uri)
-            .then(() => localLogger.debug(`Created directory at "${uri.path}"`));
+            .then(() =>
+                localLogger.debug(`Created directory at "${uri.path}"`)
+            );
     }
 
     export type DirectoryNode = {
diff --git a/client/src/addon_manager/services/git.service.ts b/client/src/addon_manager/services/git.service.ts
index d69f424c06691c6e69e691d97a6e0245159c765b..54d61f6fbc4a6d62bbc13e792988df3760437bd5 100644
--- a/client/src/addon_manager/services/git.service.ts
+++ b/client/src/addon_manager/services/git.service.ts
@@ -33,7 +33,7 @@ export const setupGit = async (context: vscode.ExtensionContext) => {
             localLogger.warn(
                 `Failed to clone ${REPOSITORY_NAME} to ${storageURI.fsPath}!`
             );
-            throw e
+            throw e;
         }
     }
 
@@ -41,10 +41,9 @@ export const setupGit = async (context: vscode.ExtensionContext) => {
     try {
         await git.fetch();
         await git.pull();
-
         await git.checkout("main");
     } catch (e) {
         localLogger.warn(`Failed to pull ${REPOSITORY_NAME}!`);
-        throw e
+        throw e;
     }
 };
diff --git a/client/src/addon_manager/services/logging.service.ts b/client/src/addon_manager/services/logging.service.ts
index 40643b71ddb2c0864db0a76bce5fd0a21a73362f..732769bea8e15ba5deaee2ba59bac1c017e6a94b 100644
--- a/client/src/addon_manager/services/logging.service.ts
+++ b/client/src/addon_manager/services/logging.service.ts
@@ -15,7 +15,7 @@ import VSCodeLogFileTransport from "./logging/vsCodeLogFileTransport";
 // Create logger from winston
 export const logger = winston.createLogger({
     level: "info",
-    defaultMeta: { category: "General" },
+    defaultMeta: { category: "General", report: true },
     format: winston.format.combine(
         winston.format.timestamp({
             format: "YYYY-MM-DD HH:mm:ss",
@@ -44,7 +44,7 @@ export const logger = winston.createLogger({
 
 // When a error is logged, ask user to report error.
 logger.on("data", async (info) => {
-    if (info.level !== "error") return;
+    if (info.level !== "error" || !info.report) return;
 
     const choice = await vscode.window.showErrorMessage(
         `An error occurred with the Lua Addon Manager. Please help us improve by reporting the issue ❤️`,
diff --git a/client/src/addon_manager/services/logging/vsCodeLogFileTransport.ts b/client/src/addon_manager/services/logging/vsCodeLogFileTransport.ts
index 92914842ea333e933349c0201f83db92b19ce31b..ccf497970dda79dd9d598b7fbb3a416d8cd3e869 100644
--- a/client/src/addon_manager/services/logging/vsCodeLogFileTransport.ts
+++ b/client/src/addon_manager/services/logging/vsCodeLogFileTransport.ts
@@ -9,7 +9,7 @@ import dayjs from "dayjs";
 export default class VSCodeLogFileTransport extends Transport {
     public static currentLogFile: vscode.Uri;
 
-    private initialized = false;
+    public initialized = false;
 
     private logDir: vscode.Uri;
 
@@ -30,7 +30,7 @@ export default class VSCodeLogFileTransport extends Transport {
         // Create log file stream
         const logFileUri = vscode.Uri.joinPath(
             addonLogsDir,
-            `${dayjs().format("HH-mm")}.log`
+            `${dayjs().format("HH")}.log`
         );
         VSCodeLogFileTransport.currentLogFile = logFileUri;
         this.stream = fs.createWriteStream(logFileUri.fsPath, {
@@ -62,7 +62,9 @@ export default class VSCodeLogFileTransport extends Transport {
             this.emit("logged", info);
         });
 
-        this.stream.write(stringToByteArray(info[MESSAGE as unknown as string] + "\n"));
+        this.stream.write(
+            stringToByteArray(info[MESSAGE as unknown as string] + "\n")
+        );
 
         callback();
     }
diff --git a/client/src/addon_manager/types/webvue.ts b/client/src/addon_manager/types/webvue.ts
index 7ecb468ce677589a9c9e797912b6f251f4a6f52f..5338ba104ae096e1a90e4f4a96855c420ce5383c 100644
--- a/client/src/addon_manager/types/webvue.ts
+++ b/client/src/addon_manager/types/webvue.ts
@@ -1,6 +1,6 @@
 export interface WebVueMessage {
     command: string;
-    data: { [index: string]: any };
+    data: { [index: string]: unknown };
 }
 
 export enum NotificationLevels {
diff --git a/client/webvue b/client/webvue
index 36214f0c21bef2f11d46781584a12c4e6ec97090..ac8a4db6fbb2e5aab49dca9aa55e367cec92aadd 160000
--- a/client/webvue
+++ b/client/webvue
@@ -1 +1 @@
-Subproject commit 36214f0c21bef2f11d46781584a12c4e6ec97090
+Subproject commit ac8a4db6fbb2e5aab49dca9aa55e367cec92aadd