From 9188050f8737c0bf610feaba0005b622e1a63d05 Mon Sep 17 00:00:00 2001 From: kaotisk Date: Mon, 8 Apr 2024 14:36:03 +0300 Subject: Log lib + plus more generic handler approach --- bin/ak-log | 43 +++++++++++++++++++++++++++++ lib/_ak_log | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100755 bin/ak-log diff --git a/bin/ak-log b/bin/ak-log new file mode 100755 index 0000000..d22da70 --- /dev/null +++ b/bin/ak-log @@ -0,0 +1,43 @@ +#!/bin/bash +## +## Used to overview, archive or append to the log file +## +## Usage: +## +## -h, --help Prints this help message +## +## -f, --follow Follows the log file as its appended with new +## messages +## +## -m, --message +## Adds a log message to the log +## +## -r, --rotate Cleans up log files after archiving them +## +## -g, --grep Select a script to view only logs from that +## +fullprogrampath="$(realpath $0)" +PROGRAM=$(basename $0) +descriptionString="Log file handler" + +# At least these +source $AK_LIBDIR/_ak_log +source $AK_LIBDIR/_ak_script + +# Your stuff here... +example(){ + echo "Example" +} + +# Flags to run +if [ ! -z $1 ]; then + case $1 in + -h | --help) _ak_usage; exit;; + -f | --follow) _ak_log_follow; exit;; + -g | --grep) _ak_log_grep; exit;; + -m | --message) shift; _ak_log_message $*; exit;; + -r | --rotate) _ak_log_rotate; exit;; + * ) _ak_usage;; + esac +else _ak_usage +fi diff --git a/lib/_ak_log b/lib/_ak_log index 6a55f5f..e06051b 100755 --- a/lib/_ak_log +++ b/lib/_ak_log @@ -3,3 +3,94 @@ logit(){ ak-log-message "$PROGRAM" "$1" "$2" } + +_ak_log_follow(){ + tail -f $AK_LOGSFILE | while read -r p || [ -n "$p" ] + do + timestamp="$(echo "$p" | awk '{print $1}')" + program="$(echo "$p" | awk '{print $2}')" + messagetype="$(echo "$p" | awk '{print $3}')" + message="$(echo "$p" | cut -d ' ' -f4-)" + printf '%s \033[1;32m%s\033[0;00m \033[1;31m%s\033[0;00m %s\n' \ + "$(date --date=@$timestamp +%Y%m%d_%H%M%S)" \ + "$program" \ + "$messagetype" \ + "$message" + done +} + +_ak_log_grep(){ + if [ ! -z $1 ] && [ -n "$1" ] + then + if [ "$1" == "-h" ] || [ "$1" == "--help" ] + then + description + echo "Launch with no arguments and select from the menu that will appear" + exit 1 + fi + fi + + echo "The following scripts have entries in the log file." + echo "Select one of those by entering the number of it below and hit enter:" + select x in $(cat $AK_LOGSFILE | cut -d ' ' -f 2 | sort | uniq) + do + grep $x $AK_LOGSFILE + break + done +} + +_ak_log_rotate(){ + tar cvfz $AK_ARCHIVESDIR/logs_$(date -u +%s).tar.gz $AK_WORKDIR/akd.log $AK_WORKDIR/akd.err $AK_WORKDIR/logs + + cat /dev/null > $AK_WORKDIR/akd.log + cat /dev/null > $AK_WORKDIR/akd.err + cat /dev/null > $AK_WORKDIR/logs +} + +_ak_log_message(){ + PROGRAM="$(basename $0)" + TS="$(date -u +%s)" + if [ ! -z $1 ] && [ -n "$1" ] + then + if [ "$1" == "-h" ] || [ "$1" == "--help" ] + then + echo "$PROGRAM - Log events" + echo "-h, --help Prints this message" + echo " Logs this message" + exit 0 + fi + if [ ! -z "$2" ] && [ -n "$2" ] + then + if [ ! -z "$3" ] && [ -n "$3" ] + then + echo "$TS" "<$1>" "[$2]" "$3" >> $AK_LOGSFILE + if [ "$AK_DEBUG" == "yes" ] + then + echo "$TS" "<$1>" "[$2]" "$3" >&2 + fi + exit 0 + else + echo "$TS" "<$1>" "[ERROR]" "No message" >> $AK_LOGSFILE + if [ "$AK_DEBUG" == "yes" ] + then + echo "$TS" "<$1>" "[ERROR]" "No message" >&2 + fi + exit 1 + fi + else + echo "$TS" "<$1>" "[ERROR]" "No type and message" >> $AK_LOGSFILE + if [ "$AK_DEBUG" == "yes" ] + then + echo "$TS" "<$1>" "[ERROR]" "No type and message" >&2 + fi + exit 1 + fi + else + echo "$TS" "<$(basename $0)>" "[ERROR]" "No arguments given" >> $AK_LOGSFILE + if [ "$AK_DEBUG" == "yes" ] + then + echo "$TS" "<$(basename $0)>" "[ERROR]" "No arguments given" >&2 + fi + exit 1 + fi +} -- cgit v1.2.3