Skip to content

Commit ebd90ca

Browse files
committed
feat: Add log optimization option and enhance logging configuration
1 parent bd59326 commit ebd90ca

File tree

6 files changed

+29
-6
lines changed

6 files changed

+29
-6
lines changed

api.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2635,6 +2635,12 @@ paths:
26352635
type: string
26362636
format: date-time
26372637
description: End time for log deletion
2638+
- name: optimize
2639+
in: query
2640+
schema:
2641+
type: boolean
2642+
default: true
2643+
description: Whether to optimize the log after clearing
26382644
responses:
26392645
"200":
26402646
description: OK

config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ export type ConfigType = {
4141
max_import_img_count: number;
4242
enable_server_timing: boolean;
4343
thumbnail_format: ThumbnailFormat;
44+
/** Enable logging stack for all log levels */
45+
logging_stack: boolean;
4446
};
4547

4648
export enum ThumbnailMethod {
@@ -254,6 +256,9 @@ export class Config {
254256
get enable_server_timing() {
255257
return this._return_bool("enable_server_timing") ?? false;
256258
}
259+
get logging_stack() {
260+
return this._return_bool("logging_stack") ?? false;
261+
}
257262
to_json(): ConfigType {
258263
return {
259264
cookies: typeof this.cookies === "string",
@@ -294,6 +299,7 @@ export class Config {
294299
max_import_img_count: this.max_import_img_count,
295300
enable_server_timing: this.enable_server_timing,
296301
thumbnail_format: this.thumbnail_format,
302+
logging_stack: this.logging_stack,
297303
};
298304
}
299305
}

main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ if (cmd == CMD.Unknown) {
7474
}
7575

7676
const settings = await load_settings(args.config);
77-
await base_logger.init(settings.db_path || settings.base);
77+
await base_logger.init(settings);
7878
if (!check_file_permissions(settings.base)) {
7979
throw Error("Can not aceess download loaction.");
8080
}

routes/api/log.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Handlers } from "$fresh/server.ts";
22
import { return_data, return_error } from "../../server/utils.ts";
33
import { User, UserPermission } from "../../db.ts";
4-
import { get_string, parse_int } from "../../server/parse_form.ts";
4+
import { get_string, parse_bool, parse_int } from "../../server/parse_form.ts";
55
import { base_logger, LogLevel } from "../../utils/logger.ts";
66

77
export const handler: Handlers = {
@@ -33,7 +33,9 @@ export const handler: Handlers = {
3333
base_logger.log("Failed to parse end_time:", e);
3434
return return_error(1, "Failed to parse end_time.");
3535
}
36+
const optimize = await parse_bool(form.get("optimize"), true);
3637
base_logger.clear(typ, min_level, max_level, deleted_level, end_time);
38+
if (optimize) base_logger.optimize();
3739
return return_data(true);
3840
},
3941
async GET(req, ctx) {

server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const renderFn: RenderFunction = (ctx, render) => {
3030
export async function startServer(path: string) {
3131
cfg_path = path;
3232
const cfg = await load_settings(path);
33-
await base_logger.init(cfg.db_path || cfg.base);
33+
await base_logger.init(cfg);
3434
task_manager = new TaskManager(cfg);
3535
await task_manager.init();
3636
task_manager.run(true).catch((e) => {

utils/logger.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { join } from "@std/path";
22
import { format as format_ver, parse as parse_ver } from "@std/semver";
3+
import type { Config } from "../config.ts";
34
import { parse_bool, stackTrace } from "../utils.ts";
45
import { Db, QueryParameterSet, SqliteMaster } from "./db_interface.ts";
56

@@ -60,10 +61,13 @@ export function format_message(
6061

6162
class BaseLogger {
6263
db?: Db;
64+
#cfg?: Config;
6365
#exist_table: Set<string> = new Set();
6466
#use_ffi = false;
6567
readonly version = parse_ver("1.0.0-0");
66-
async init(base_path: string) {
68+
async init(cfg: Config) {
69+
this.#cfg = cfg;
70+
const base_path = cfg.db_path || cfg.base;
6771
const db_path = join(base_path, "logs.db");
6872
this.#use_ffi = parse_bool(Deno.env.get("DB_USE_FFI") ?? "false");
6973
if (this.#use_ffi) {
@@ -133,9 +137,10 @@ class BaseLogger {
133137
}
134138
add(type: string, level: number, ...messages: unknown[]) {
135139
this.#fallback(type, level, ...messages);
136-
if (!this.db) return;
140+
if (!this.db || !this.#cfg) return;
137141
const message = format_message(messages);
138-
const stack = (level >= LogLevel.Trace && level < LogLevel.Debug) ||
142+
const stack = this.#cfg.logging_stack ||
143+
(level >= LogLevel.Trace && level < LogLevel.Debug) ||
139144
level >= LogLevel.Warn
140145
? stackTrace(2)
141146
: undefined;
@@ -360,6 +365,10 @@ class BaseLogger {
360365
log(type: string, ...messages: unknown[]) {
361366
this.add(type, LogLevel.Log, ...messages);
362367
}
368+
optimize() {
369+
if (!this.db) return;
370+
this.db.query("VACUUM;");
371+
}
363372
trace(type: string, ...messages: unknown[]) {
364373
this.add(type, LogLevel.Trace, ...messages);
365374
}

0 commit comments

Comments
 (0)