From 798bee0f79ab105aa864a707085933f396a83c5b Mon Sep 17 00:00:00 2001 From: shokollm <270575765+shokollm@users.noreply.github.com> Date: Tue, 7 Apr 2026 01:48:52 +0000 Subject: [PATCH] feat: add centralized logging handler with structured log format - Add log() function with info|warn|error|debug levels - Log format: timestamp level component message - Sensitive values (tokens, passwords, secrets) are masked automatically - Fix mask_sensitive_vars to handle empty input gracefully Implements: shoko/kugetsu#118 --- skills/kugetsu/scripts/kugetsu-config.sh | 2 +- skills/kugetsu/scripts/kugetsu-log.sh | 34 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/skills/kugetsu/scripts/kugetsu-config.sh b/skills/kugetsu/scripts/kugetsu-config.sh index 8efbcbf..00bf52b 100755 --- a/skills/kugetsu/scripts/kugetsu-config.sh +++ b/skills/kugetsu/scripts/kugetsu-config.sh @@ -32,7 +32,7 @@ if [ -f "$KUGETSU_DIR/config" ]; then fi mask_sensitive_vars() { - local line="$1" + local line="${1:-}" for var in GITEA_TOKEN GITHUB_TOKEN GITLAB_TOKEN API_KEY PASSWORD TOKEN SECRET; do if [[ "$line" =~ $var ]]; then line=$(echo "$line" | sed -E "s/=.*/=***MASKED***/") diff --git a/skills/kugetsu/scripts/kugetsu-log.sh b/skills/kugetsu/scripts/kugetsu-log.sh index 84586b3..85d61a7 100755 --- a/skills/kugetsu/scripts/kugetsu-log.sh +++ b/skills/kugetsu/scripts/kugetsu-log.sh @@ -1,6 +1,40 @@ #!/bin/bash set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/kugetsu-config.sh" + +log() { + local level="${1:-}" + local component="${2:-}" + local message="${3:-}" + local timestamp + timestamp=$(date -Iseconds) + + case "$level" in + info|warn|error|debug) ;; + *) + echo "Error: log level must be info|warn|error|debug" >&2 + return 1 + ;; + esac + + if [ -z "$message" ]; then + message="$component" + component="${level}" + level="info" + fi + + local masked + masked=$(mask_sensitive_vars "$message") + echo "[$timestamp] $level $component $masked" +} + +log_debug() { log "debug" "$1" "${2:-}"; } +log_info() { log "info" "$1" "${2:-}"; } +log_warn() { log "warn" "$1" "${2:-}"; } +log_error() { log "error" "$1" "${2:-}"; } + cmd_logs() { local count="${1:-10}"