1- #! /usr/bin/env sh
1+ #! /usr/bin/env bash
22
33FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT=" text"
44FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT=" %Y-%m-%d %T"
55FABASOAD_LOG_CONFIG_HEADER_DEFAULT=" fabasoad-log"
66FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT=" true"
7- FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT=" [<header>] <time > level=<level> <message>"
7+ FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT=" [<header>] <timestamp > level=<level> <message>"
88FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT=" info"
99
10+ # Initialization
11+
12+ _get_from_config_or_default () {
13+ jq -r --arg p " ${1} " --arg d " ${3} " ' try .config[$p] catch $d' " ${2} "
14+ }
15+
16+ _fabasoad_log_init () {
17+ header=" ${FABASOAD_LOG_CONFIG_HEADER_DEFAULT} "
18+ output_format=" ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT} "
19+ text_format=" ${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT} "
20+ date_format=" ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} "
21+ text_color=" ${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT} "
22+ log_level=" ${FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT} "
23+
24+ config_path=" ${1} "
25+
26+ if [ -f " ${config_path} " ]; then
27+ header=$( _get_from_config_or_default " header" " ${config_path} " " ${FABASOAD_LOG_CONFIG_HEADER_DEFAULT} " )
28+ tmp=$( _get_from_config_or_default " output-format" " ${config_path} " " ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT} " )
29+ case " ${tmp} " in
30+ json|xml|text)
31+ output_format=" ${tmp} "
32+ ;;
33+ esac
34+ text_format=$( _get_from_config_or_default " text-format" " ${config_path} " " ${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT} " )
35+ date_format=$( _get_from_config_or_default " date-format" " ${config_path} " " ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} " )
36+ tmp=$( _get_from_config_or_default " text-color" " ${config_path} " " ${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT} " )
37+ case " ${tmp} " in
38+ true|false)
39+ text_color=" ${tmp} "
40+ ;;
41+ esac
42+ tmp=$( _get_from_config_or_default " log-level" " ${config_path} " " ${FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT} " )
43+ case " ${tmp} " in
44+ error|warning|info|debug|off)
45+ log_level=" ${tmp} "
46+ ;;
47+ esac
48+ fi
49+
50+ export FABASOAD_LOG_CONFIG_HEADER=" ${header:- ${FABASOAD_LOG_CONFIG_HEADER_DEFAULT} } "
51+ export FABASOAD_LOG_CONFIG_OUTPUT_FORMAT=" ${output_format:- ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT} } "
52+ export FABASOAD_LOG_CONFIG_TEXT_FORMAT=" ${text_format:- ${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT} } "
53+ export FABASOAD_LOG_CONFIG_DATE_FORMAT=" ${date_format:- ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} } "
54+ export FABASOAD_LOG_CONFIG_TEXT_COLOR=" ${text_color:- ${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT} } "
55+ export FABASOAD_LOG_CONFIG_LOG_LEVEL=" ${log_level:- ${FABASOAD_LOG_CONFIG_LOG_LEVEL_DEFAULT} } "
56+ }
57+
1058# Text modifications
1159
1260_fabasoad_wrap_text_with_color () {
13- log_line=" $1 "
14- level=" $2 "
61+ log_line=" ${1} "
62+ level=" ${2} "
1563 if [ " ${FABASOAD_LOG_CONFIG_TEXT_COLOR:- ${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT} } " = " true" ]; then
1664 if [ " ${level} " = " error" ]; then
1765 printf " \033[91m${log_line} \033[0m"
@@ -29,9 +77,9 @@ _fabasoad_wrap_text_with_color() {
2977
3078_fabasoad_wrap_text_with_bold () {
3179 if [ " ${FABASOAD_LOG_CONFIG_TEXT_COLOR:- ${FABASOAD_LOG_CONFIG_TEXT_COLOR_DEFAULT} } " = " true" ]; then
32- echo " \033[1m$1 \033[22m"
80+ echo " \033[1m${1} \033[22m"
3381 else
34- echo " $1 "
82+ echo " ${1} "
3583 fi
3684}
3785
@@ -76,8 +124,8 @@ _fabasoad_is_printing_debug_ok() {
76124# Printing
77125
78126_fabasoad_print_log () {
79- level=" $1 "
80- message=" $2 "
127+ level=" ${1} "
128+ message=" ${2} "
81129
82130 if [ " ${level} " = " error" ] && [ " $( _fabasoad_is_printing_error_ok) " = " true" ]; then # error
83131 printf " ${message} \n" >&2
@@ -91,12 +139,12 @@ _fabasoad_print_log() {
91139}
92140
93141_fabasoad_log_text () {
94- level=" $1 "
95- message=" $2 "
142+ level=" ${1} "
143+ message=" ${2} "
96144
97145 text_msg=" ${FABASOAD_LOG_CONFIG_TEXT_FORMAT:- ${FABASOAD_LOG_CONFIG_TEXT_FORMAT_DEFAULT} } "
98146 text_msg=${text_msg/ <header>/ ${FABASOAD_LOG_CONFIG_HEADER:- ${FABASOAD_LOG_CONFIG_HEADER_DEFAULT} } }
99- text_msg=${text_msg/ <time >/ $(date +" ${FABASOAD_LOG_CONFIG_DATE_FORMAT:- ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} } " )}
147+ text_msg=${text_msg/ <timestamp >/ $(date +" ${FABASOAD_LOG_CONFIG_DATE_FORMAT:- ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} } " )}
100148 text_msg=${text_msg/ <level>/ $(_fabasoad_wrap_text_with_bold " ${level} " )}
101149 text_msg=${text_msg/ <message>/ ${message} }
102150
@@ -105,22 +153,27 @@ _fabasoad_log_text() {
105153}
106154
107155_fabasoad_log_json () {
108- level=" $1 "
109- message=" $2 "
110-
111- json_msg=" {"
112- json_msg=" ${json_msg} \" timestamp\" :\" $( date +" ${FABASOAD_LOG_CONFIG_DATE_FORMAT:- ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} } " ) \" ,"
113- json_msg=" ${json_msg} \" header\" :\" ${FABASOAD_LOG_CONFIG_HEADER:- ${FABASOAD_LOG_CONFIG_HEADER_DEFAULT} } \" ,"
114- json_msg=" ${json_msg} \" level\" :\" ${level} \" ,"
115- json_msg=" ${json_msg} \" message\" :\" ${message} \" "
116- json_msg=" ${json_msg} }"
156+ timestamp=" $( date +" ${FABASOAD_LOG_CONFIG_DATE_FORMAT:- ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} } " ) "
157+ header=" ${FABASOAD_LOG_CONFIG_HEADER:- ${FABASOAD_LOG_CONFIG_HEADER_DEFAULT} } "
158+
159+ json_msg=$( jq -cn \
160+ --arg timestamp " ${timestamp} " \
161+ --arg header " ${header} " \
162+ --arg level " ${1} " \
163+ --arg message " ${2} " \
164+ ' {
165+ timestamp: $timestamp,
166+ header: $header,
167+ level: $level,
168+ message: $message
169+ }' )
117170
118171 _fabasoad_print_log " ${level} " " ${json_msg} "
119172}
120173
121174_fabasoad_log_xml () {
122- level=" $1 "
123- message=" $2 "
175+ level=" ${1} "
176+ message=" ${2} "
124177
125178 xml_msg=" <log>"
126179 xml_msg=" ${xml_msg} <timestamp>$( date +" ${FABASOAD_LOG_CONFIG_DATE_FORMAT:- ${FABASOAD_LOG_CONFIG_DATE_FORMAT_DEFAULT} } " ) </timestamp>"
@@ -134,30 +187,41 @@ _fabasoad_log_xml() {
134187
135188# Public functions
136189
190+ # Prints log line.
191+ # Parameters:
192+ # 1. (Required) Log level. Possible values: debug, info, warning, error, off.
193+ # 2. (Required) Log message.
194+ # 2. (Optional) Path to the config file.
195+ #
196+ # Usage example:
197+ # fabasoad_log "error" "This is error message"
198+ # fabasoad_log "debug" "This is debug message" "./config.json"
137199fabasoad_log () {
138200 level=" ${1} "
139201 message=" ${2} "
140202 config_path=" ${3:- " " } "
141203
142204 if [ -f " ${config_path} " ]; then
143- log_init_lib=" $( dirname $( realpath " ${0} " ) ) /fabasoad-log-init.sh"
144- if [ -f " ${log_init_lib} " ]; then
145- . " ${log_init_lib} "
146- fabasoad_log_init " ${config_path} "
147- fi
205+ _fabasoad_log_init " ${config_path} "
148206 fi
149207
150- if [ " ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT:- ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT} } " = " xml" ]; then
151- _fabasoad_log_xml " ${level} " " ${message} "
152- elif [ " ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT:- ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT} } " = " json" ]; then
153- _fabasoad_log_json " ${level} " " ${message} "
154- else
155- _fabasoad_log_text " ${level} " " ${message} "
156- fi
208+ case " ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT:- ${FABASOAD_LOG_CONFIG_OUTPUT_FORMAT_DEFAULT} } " in
209+ " xml" )
210+ log_func=" _fabasoad_log_xml"
211+ ;;
212+ " json" )
213+ log_func=" _fabasoad_log_json"
214+ ;;
215+ * )
216+ log_func=" _fabasoad_log_text"
217+ ;;
218+ esac
219+
220+ ${log_func} " ${level} " " ${message} "
157221}
158222
159223# export
160- if [ ${BASH_SOURCE[0]} != $0 ]; then
224+ if [[ ${BASH_SOURCE[0]} != $0 ] ]; then
161225 export -f fabasoad_log
162226else
163227 fabasoad_log " ${@ } "
0 commit comments