

___x_cmd_log_store(){
    [ $# -gt 0 ] ||     set -- -h
    local op="$1";      shift
    case "$op" in
        get_|get|set|unset|ls|gc)
                "___x_cmd_log_store_${op}" "$@" ;;
        -h|--help)
                return 1 ;;
    esac
}

___x_cmd_log_store_set(){
    local export_flag=
    case "$1" in
        --export)
            export_flag=1;  shift
        ;;

        --pidofsubshell)
            local x_
            ___x_cmd pidofsubshell_ || return $?
            set -- "$___X_CMD_LOG_STORE_DEFAULT/pid/$x_"
        ;;
    esac

    local fp
    case "$1" in
        /*)     fp="$1" ;;
        *)      fp="$___X_CMD_LOG_STORE_DEFAULT/$1" ;;
    esac

    local dp="${fp%/*}"
    if [ -d "$dp" ]; then
        ___X_CMD_LOG_OUTFILE="$1"
    else
        ___x_cmd mkdirp "$dp" || {
            log:error "Fail to set log store to [$1] because [$dir] is not a directory"
            return 1
        }
    fi
    ___X_CMD_LOG_OUTFILE="$fp"

    [ -z "$export_flag" ] || ___x_cmd_log_store_export
}

___x_cmd_log_store_export(){
    export ___X_CMD_LOG_OUTFILE
}

___x_cmd_log_store_unset(){
    unset ___X_CMD_LOG_OUTFILE
}

___x_cmd_log_store_ls(){
    [ -d "$___X_CMD_LOG_STORE_DEFAULT" ] || return 0
    ___x_cmd fsiter "$___X_CMD_LOG_STORE_DEFAULT"
}

___x_cmd_log_store_gc(){
    ___x_cmd find "$___X_CMD_LOG_STORE_DEFAULT" -type f -mtime +7 -delete
}

___x_cmd_log_store_get_(){
    [ -n "$___X_CMD_LOG_OUTFILE" ] || return 1
    x_="$___X_CMD_LOG_OUTFILE"
}

___x_cmd_log_store_get(){
    local x_=
    ___x_cmd_log_store_get_
    printf "%s\n" "$x_"
}
