【发布时间】:2016-12-14 00:08:14
【问题描述】:
剧本写作有权威吗?是否不鼓励使用大/长 bash 脚本,从而使日志记录变得不必要?
我尝试了几种不同的方法来记录脚本输出,但在决定它们之间时想参考一些东西:
- 将一些行回显/打印到控制台供用户读取,“手动”将更完整的信息写入日志文件(通过调用添加时间戳并写入文件的“日志”函数)。用另一个函数检查命令的退出代码。
- 将命令输出通过管道传输到从标准输入读取的日志函数,然后将其写入文件(带有时间戳),最后将组合输出回显到控制台。
示例 1:
log_file='test.log' log () { # Writes a message to the log with a full timestamp and log level, "INFO" if not specified. # Requires a global variable, "$log_file" # Example: log 'Something happened' # or: log 'Bad stuff happened' 'WARNING' local log_msg="$1" local log_lvl="$2" if [ -z "$log_lvl" ]; then log_lvl="INFO" fi local log_prefix="$(printf '[%s] [%s]' "$(date +'%Y/%m/%d %T.%3N')" "$log_lvl")" printf '%-36s %s\n' "$log_prefix" "$log_msg" >> "$log_file" }示例 2:
set -o pipefail log_file='test.log' log () { # Relies on stdin! local msg="$(cat -)" echo "$msg" echo '['"$(date)"']' "$msg" >> "$log_file" } echo test |& log echo "$?" not_a_command |& log echo "$?" echo finished |& log echo "$?"
【问题讨论】: