我习惯于Java中的SLF4J
和Python中的logging
,我可以将函数名称和 行号作为输出的字段格式。
强调:行号
我可以在Bash中获得类似的东西吗?
目标:构建一个log_error
泛型函数,从我的(巨大的)脚本调用,输出错误源,函数名和行号的严重性级别。
预期用途:
log_error "INFO: my info" ... # called from within my_function at line 20
预期输出:
[INFO] my_function@20 my info
这样的事情是否可能?
答案 0 :(得分:2)
使用$LINENO:每次引用此参数时,shell都会在脚本或函数中替换表示当前顺序行号(以1开头)的十进制数。
答案 1 :(得分:0)
最好使用BASH_LINENO
数组。这是Bash Manual的摘录:
BASH_LINENO 一个数组变量,其成员是中的行号 调用FUNCNAME的每个相应成员的源文件。 $ {BASH_LINENO [$ i]}是源文件中的行号 ($ {BASH_SOURCE [$ i + 1]}),其中调用了$ {FUNCNAME [$ i]}(或 $ {BASH_LINENO [$ i-1]}(如果在另一个shell函数中引用)。采用 LINENO获取当前行号。
这是Bash的全面日志记录实现:
https://github.com/codeforester/base/blob/master/lib/stdlib.sh