diff --git a/package-lock.json b/package-lock.json
index a00d81204..2aa49222c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "trilium",
- "version": "0.37.8",
+ "version": "0.38.0-beta",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -6996,9 +6996,9 @@
},
"dependencies": {
"glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -9307,9 +9307,9 @@
}
},
"sqlite3": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.1.0.tgz",
- "integrity": "sha512-RvqoKxq+8pDHsJo7aXxsFR18i+dU2Wp5o12qAJOV5LNcDt+fgJsc2QKKg3sIRfXrN9ZjzY1T7SNe/DFVqAXjaw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.1.1.tgz",
+ "integrity": "sha512-CvT5XY+MWnn0HkbwVKJAyWEMfzpAPwnTiB3TobA5Mri44SrTovmmh499NPQP+gatkeOipqPlBLel7rn4E/PCQg==",
"requires": {
"nan": "^2.12.1",
"node-pre-gyp": "^0.11.0",
diff --git a/package.json b/package.json
index b93478b52..aa6d42830 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,7 @@
"session-file-store": "1.3.1",
"simple-node-logger": "18.12.23",
"sqlite": "3.0.3",
- "sqlite3": "4.1.0",
+ "sqlite3": "4.1.1",
"string-similarity": "3.0.0",
"tar-stream": "2.1.0",
"turndown": "5.0.3",
diff --git a/src/public/javascripts/dialogs/backend_log.js b/src/public/javascripts/dialogs/backend_log.js
new file mode 100644
index 000000000..f899b90e0
--- /dev/null
+++ b/src/public/javascripts/dialogs/backend_log.js
@@ -0,0 +1,32 @@
+import server from "../services/server.js";
+import utils from "../services/utils.js";
+
+const $dialog = $("#backend-log-dialog");
+const $backendLogTextArea = $("#backend-log-textarea");
+const $refreshBackendLog = $("#refresh-backend-log-button");
+
+export async function showDialog() {
+ utils.closeActiveDialog();
+
+ glob.activeDialog = $dialog;
+
+ $dialog.modal();
+
+ load();
+}
+
+function scrollToBottom() {
+ $backendLogTextArea.scrollTop($backendLogTextArea[0].scrollHeight);
+}
+
+async function load() {
+ const backendLog = await server.get('backend-log');
+
+ $backendLogTextArea.text(backendLog);
+
+ scrollToBottom();
+}
+
+$refreshBackendLog.on('click', load);
+
+$dialog.on('shown.bs.modal', scrollToBottom);
\ No newline at end of file
diff --git a/src/public/javascripts/services/entrypoints.js b/src/public/javascripts/services/entrypoints.js
index c31505350..d3d0604b2 100644
--- a/src/public/javascripts/services/entrypoints.js
+++ b/src/public/javascripts/services/entrypoints.js
@@ -17,6 +17,7 @@ const JUMP_TO_NOTE = "../dialogs/jump_to_note.js";
const NOTE_SOURCE = "../dialogs/note_source.js";
const RECENT_CHANGES = "../dialogs/recent_changes.js";
const SQL_CONSOLE = "../dialogs/sql_console.js";
+const BACKEND_LOG = "../dialogs/backend_log.js";
const ATTRIBUTES = "../dialogs/attributes.js";
const HELP = "../dialogs/help.js";
const NOTE_INFO = "../dialogs/note_info.js";
@@ -95,6 +96,10 @@ function registerEntrypoints() {
$("#open-sql-console-button").on('click', showSqlConsoleDialog);
keyboardActionService.setGlobalActionHandler("ShowSQLConsole", showSqlConsoleDialog);
+ const showBackendLogDialog = () => import(BACKEND_LOG).then(d => d.showDialog());
+ $("#show-backend-log-button").on('click', showBackendLogDialog);
+ keyboardActionService.setGlobalActionHandler("ShowBackendLog", showBackendLogDialog);
+
$("#show-about-dialog-button").on('click', () => import(ABOUT).then(d => d.showDialog()));
if (utils.isElectron()) {
diff --git a/src/routes/api/backend_log.js b/src/routes/api/backend_log.js
new file mode 100644
index 000000000..fa550cbd3
--- /dev/null
+++ b/src/routes/api/backend_log.js
@@ -0,0 +1,15 @@
+"use strict";
+
+const fs = require('fs');
+const dateUtils = require('../../services/date_utils');
+const {LOG_DIR} = require('../../services/data_dir.js');
+
+async function getBackendLog() {
+ const file = `${LOG_DIR}/trilium-${dateUtils.localNowDate()}.log`;
+
+ return fs.readFileSync(file, 'utf8');
+}
+
+module.exports = {
+ getBackendLog
+};
\ No newline at end of file
diff --git a/src/routes/routes.js b/src/routes/routes.js
index fb8f1ebdf..6a4f0d408 100644
--- a/src/routes/routes.js
+++ b/src/routes/routes.js
@@ -35,6 +35,7 @@ const linkMapRoute = require('./api/link_map');
const clipperRoute = require('./api/clipper');
const similarNotesRoute = require('./api/similar_notes');
const keysRoute = require('./api/keys');
+const backendLogRoute = require('./api/backend_log');
const log = require('../services/log');
const express = require('express');
@@ -247,6 +248,8 @@ function register(app) {
apiRoute(GET, '/api/keyboard-actions', keysRoute.getKeyboardActions);
apiRoute(GET, '/api/keyboard-shortcuts-for-notes', keysRoute.getShortcutsForNotes);
+ apiRoute(GET, '/api/backend-log', backendLogRoute.getBackendLog);
+
app.use('', router);
}
diff --git a/src/services/keyboard_actions.js b/src/services/keyboard_actions.js
index dfdf6a8dc..862e82589 100644
--- a/src/services/keyboard_actions.js
+++ b/src/services/keyboard_actions.js
@@ -225,6 +225,11 @@ const DEFAULT_KEYBOARD_ACTIONS = [
defaultShortcuts: ["Alt+O"],
description: "Shows SQL Console dialog"
},
+ {
+ actionName: "ShowBackendLog",
+ defaultShortcuts: [],
+ description: "Shows Backend Log dialog"
+ },
{
actionName: "ShowHelp",
defaultShortcuts: ["F1"],
diff --git a/src/views/desktop.ejs b/src/views/desktop.ejs
index 0cb7339cb..467b1b4ef 100644
--- a/src/views/desktop.ejs
+++ b/src/views/desktop.ejs
@@ -81,6 +81,12 @@
+
+
+ Show backend log
+
+
+
Reload frontend
@@ -187,6 +193,7 @@
<% include dialogs/link_map.ejs %>
<% include dialogs/clone_to.ejs %>
<% include dialogs/move_to.ejs %>
+ <% include dialogs/backend_log.ejs %>