<< ..

shell中日志输出的最佳实践

发布时间:

需求

最初的需求是我希望在cron里部署一个脚本,并输出日志到一个tmp文件存根。在调试的时候我想知道脚本当前的执行状态,一直tail看输出其实挺不爽的。

这个更“master”一些的做法是,执行shell脚本的时候+x。但确实会有同时输出日志到多处的这种需求,这个时候最佳办法就是写一个专门的日志print函数。

实践

Ref: (stackoverflow) How to output text to both screen and log file

下面的echolog()函数就是一个专门的日志输出工具,使用这种方法可以模块化的实现日志分离输出。

#!/usr/bin/env bash

DB_NAME_EVENTS="eventV4" && \
DB_COLLECITON_NAME="eventV4" && \

YEAR=$(date -d -1day '+%Y') && \
MONTH=$(date -d -1day '+%m') && \
DAY=$(date -d -1day '+%d') && \

LOGFILE=/tmp/renameCollectionEventV4EveryMonth_"$YEAR$MONTH".log && \

echolog()
(
    echo "$1"
    echo "$1" >> "$LOGFILE"
)

echolog "code start $(date)"
echolog "*************************************"
echolog "*                                   *"
echolog "*                                   *"
echolog "*************************************"

echolog "$DB_NAME_EVENTS: $DB_COLLECITON_NAME: $YEAR$MONTH$DAY"