#!/bin/bash

(
    if test -z "$1"
    then
        echo "need program name"
        exit 2
    fi

    : ${LOG_DIR:=$HOME/log}
    mkdir -p "$LOG_DIR"
    if ! test -d "$LOG_DIR"
    then
        echo "log dir $LOG_DIR does not exist or is not a directory"
        exit 1
    fi

    LOG_NAME=$(basename "$1").log
    LOG_PATH="$LOG_DIR/$LOG_NAME"

    echo $(date '+%Y.%m.%d %H:%M:%S (%z)') -- "$(id -un)@$(hostname):$PWD -- $*" >> "$LOG_PATH" || \
        { echo "could not write to $LOG_PATH"; exit 1; }
    "$@" >> "$LOG_PATH" 2>&1
    err=$?
    echo $(date '+%Y.%m.%d %H:%M:%S (%z)') -- "[exit: $err]" >> "$LOG_PATH"
    exit $err
) &
