我有一個日誌功能:慶典 - 重定向STDERR到日誌功能
log() {
if [[ "$#" -ne 2 ]];then
printf "[%s] %s\n" 'error' 'log function requires two arguments'
printf "%s\n" 'usage: log [level] "message"'
printf "%s\n" 'e.g: log error "this is my error"'
exit 1
elif [[ "$1" == 'info' ]]; then
printf "[%s] %s: %s %s\n" "info" "$(basename $0)" "$curr_date" "${2}" &> >(tee -a "$log_file")
elif [[ "$1" == 'warn' ]]; then
printf "[%s] %s: %s %s\n" "warn" "$(basename $0)" "$curr_date" "${2}" &> >(tee -a "$log_file")
elif [[ "$1" == 'error' ]]; then
printf "[%s] %s: %s\n" "error" "$(basename $0)" "$curr_date" "${2}" &> >(tee -a "$log_file")
elif [[ "$1" == 'debug' ]]; then
printf "[%s] %s: %s %s\n" "debug" "$(basename $0)" "$curr_date" "${2}" &> >(tee -a "$log_file")
else
printf "[%s] %s %s\n" 'error' 'unable to log with level' "'${1}'"
printf "%26s '%s' '%s' '%s' '%s'\n" 'allowed levels are' 'info' 'warn' 'error' 'debug'
fi
}
這是一個外部文件,並在任何腳本需要它來源:
source log
我想如果可能的話,將STDERR重定向到log error <message>
,以便我不必檢查每個命令的每個命令退出代碼是否有錯誤。類似於exec 2> log error
,以便捕獲每條錯誤消息。
任何幫助表示讚賞
感謝
如果您想將標準錯誤重定向到該功能,那麼我認爲您需要重定向,可能使用[進程替換](https://www.gnu.org/software/bash/manual/bash.html #Process-Substitution)寫入'while read -r line;做日誌「$ line」;完成「操作。主要的注意事項是,如圖所示,日誌函數獲取單個長字符串參數。但是,不清楚使用'do log $ line是否安全;完成「,而不是因爲您不知道錯誤消息中可能包含什麼內容。我試圖使用一個Perl腳本或類似的接收和解析並記錄信息。 –