2021.02.28   2022.02.12

Bashでシンプルなログ出力を行う

Linux    



bash(Linux)でコマンドの実行結果をログで残したいと思い、どんなシェルスクリプトでも使いまわせるログ出力関数を作成してみました。

直感的でシンプル」が今回のコンセプト。


まずはどんなログが出力されるかをご紹介。

下記の例では、docker-compose upコマンドを実行しています。(docker-composを起動させるコマンド)

処理成功時のログ [ docker_compose_up.log ]
2021/02/28 23:09:24 処理開始
2021/02/28 23:09:25 docker-compose up -d --build 実行
2021/02/28 23:09:26  Creating network "dockerdjango_default" with the default driver
Building python
Creating db ... done
Creating python ... done
Creating nginx  ... done

2021/02/28 23:09:43 docker-compose up -d --build 正常終了
2021/02/28 23:09:44 処理終了
処理失敗時のログ [ docker_compose_up.log ]
2021/02/28 23:11:36 処理開始
2021/02/28 23:11:36 docker-compose up -d --build 実行
2021/02/28 23:11:39 docker-compose up -d --build 失敗
Creating network "dockerdjango_default" with 
the default driver Building python Creating 
dockerdjango_db_1 ... 
[後略]

次はスクリプトの中身をご紹介。

最初に定義しているlog関数が今回のテーマとなる部分です。

この関数はそのままコピペするだけで他スクリプトで利用できます。

※LOG_PATH(ログ出力先)とLOG_NAME(ログファイル名)の値は、
用途に合わせて書き換えてください。

docker_compose_up.sh
#!/bin/bash

# -----ログ出力関数関連処理(そのままコピペするだけで他スクリプトで利用できる)  ----------------

# ログ出力先を設定。現在はカレントにログを吐く設定になっています。絶対パスに書き換え推奨
LOG_PATH="$(pwd)" 

# ログファイル名を設定。現在の設定ではスクリプト名に.logを付けた名前になる
LOG_NAME="$(basename $0 | sed -e 's/.sh//g').log"

# ログ関数
function log () {
   # ログ出力先とログ名を関数に設定。
   LOG=$LOG_PATH/$LOG_NAME
   # ログ出力日時のフォーマットを yyyy/mm/dd hh:mm:ss に設定する
   time=$(date '+%Y/%m/%d %T')

   # 最初の引数の文字列をログ出力する
   # 画面表示不要の場合 tee -a を >> に書き換え)
   echo -e "$time" "$1" | tee -a $LOG

   # 2番目の引数があればそれもログに出力する(エラーログで使用)
   # 画面表示不要の場合 tee -a を >> に書き換え)
   if [[ $2 != "" ]]; then
       echo -e "$2" | tee -a $LOG
   fi   
}
# ----------------------------------------------------------------------------------------------------------

# 処理開始logを出力 
log "処理開始"

# コマンド開始ログ
log "docker-compose up -d --build 実行"

# コマンド実行
result="$(docker-compose up -d --build 2>&1 > /dev/null)"

# Docker-compose実行結果判定
if [[ $(echo $?) -ne 0 ]]; then
    #コマンド失敗時のログ
    log "docker-compose up -d --build 失敗" "$result"
    exit 1
fi

# コマンド終了ログ
log "$result"
log "docker-compose up -d --build 正常終了"

# 処理終了logを出力
log "処理終了" 

exit 0

log関数の使い方

正常系

まずは先に紹介したコピペ部分をスクリプトの先頭に貼り付けます。

貼り付けた後は、基本的に、log関数の第一引数に出力したいメッセージを記述するだけです。

下記例では、第一引数に"処理開始"を設定しています。

log "処理開始"

こちらを実行するとログファイルに、次のようなメッセージが出力されます。

2021/05/24 23:11:36 処理開始

ログファイルの出力先は、デフォルトではログ関数の定義されているスクリプトと同じディレクトリとなります。(ログファイルが無い場合は処理実行時に作成される)

また、ログファイル名は、スクリプト名に「.log」が付与されたものとなります。

ログ出力先を変更する方法については後述します。


異常系

使い方は正常系とほぼ同じですが、異常系では第二引数にもメッセージを設定します。

log "cp コマンドの実行に失敗" "ファイルコピー時にエラーが発生しました"

上記のように設定を行うと、次のようにログが出力されます。

2021/02/28 23:11:39 cp コマンドの実行に失敗
ファイルコピー時にエラーが発生しました

第二引数に指定したメッセージは、第一引数で設定したメッセージの下に出力されます。

コマンドのエラーメッセージをそのまま利用したい場合は、次のようにコマンドのエラーメッセージを変数に格納し、それを第二引数へ渡します。

コマンド実行時にエラーが発生した場合、resultにエラーメッセージを格納する
result="$(実行したいコマンド 2>&1 > /dev/null)"

それをlog関数の第二引数へ渡します。

log "コマンド 失敗" "$result"

すると次のようなイメージでログ出力が行われます。

2021/05/24 23:11:39 コマンド 失敗
Creating network "hogehoge" failed
it's the end. Let's give up...

コードの解説

ログ出力先とログの名前

# ログ出力先とログ名を取得
LOG_PATH="$(pwd)"
LOG_NAME="$(basename $0 | sed -e 's/.sh//g').log"

# ログ関数
function log () {
   # ログ出力先とログ名を関数に設定。
   LOG=$LOG_PATH/$LOG_NAME

   # -- 以下略 --  

LOG_PATH変数には今自分のいるディレクトリにログを出力するように設定しています。
別の場所にログを出力したい場合、変数に設定する値を書き換えてください。

今の状態でcronなどを実行すると意図しないディレクトリにログファイルができたりするので、絶対パスでの指定を推奨。

LOG_NAME変数にはログファイル名を設定しています。
任意のログ名を設定したい場合、変数に設定する値を書き換えてください。

「$(basename $0 | sed -e 's/.sh//g').log」は自分のスクリプト名を取得して、「.sh」を「.log」に書き換えています。
$0は自分のスクリプト名を取得しますが、実行した場所のパスまで取得するので、basenameでスクリプト名だけ抽出しています。


ログ出力日時のフォーマット設定

function log () {
   # -- 中略 -
   # ログ出力日時のフォーマットを yyyy/mm/dd hh:mm:ss に設定する
   time=$(date '+%Y/%m/%d %T')

  # -- 以下略 --

dateコマンドを使用してコマンドが実行された時間を取得している部分です。

引数に「 '+%Y/%m/%d'」 と設定すると年月日が取得できます。

さらに「%T」を指定すると「hh:mm:ss」の形式で時間も取得できます。


ログ出力部分

function log () {
   # -- 中略 -
    # 最初の引数の文字列をログ出力する
   echo -e "$time" "$1" >> $LOG

   # 2番目の引数があればそれもログに出力する(エラーログで使用)
   if [[ $2 != "" ]]; then
       echo -e "$2" >> $LOG
   fi    
  # -- 以下略 --

「echo -e "$time" "$1" >> $LOG」は関数の第一引数に指定した文字列をログに出力する処理です。

「-e」はechoのオプションで、改行のある文字列も改行を考慮して出力するオプションです。

「$time」で先ほど設定したコマンド実行時間を取得し、

「$1」部分で第一引数の文字列を取得しています。

「>>」でログの内容を上書きではなく、追記するように設定しています。

以下は関数の使用例です。

# スクリプトに次の処理を記載
log "処理開始"
# 実行後のログ内容
2021/02/28 23:11:36 処理開始


ログ出力部分(エラーメッセージ部分)

   # 2番目の引数があればそれもログに出力する(エラーログで使用)
   if [[ $2 != "" ]]; then
       echo -e "$2" >> $LOG
   fi   

コマンドでエラーが発生した時に、追加でメッセージを出力する処理です。

log関数の第二引数に文字列を記述することで使用できます。

この処理は「if [[ $2 != "" ]]; then」の部分で第二引数が存在するかを判定しています。

存在しなければ何もしません。

存在する場合は第一引数で設定したメッセージを出力、改行した後に、追加でメッセージを出力します。

以下は関数の使用例です。

# スクリプトに次の処理を記載
log "zipコマンド 失敗" "zipコマンドを実行しましたが原因不明のエラーが発生しました"
# 実行後のログ内容
2021/02/28 23:11:36 zipコマンド 失敗
zipコマンドを実行しましたが原因不明のエラーが発生しました
コメント
@Leslee
2024年12月14日11:49
VR Dance world dubai dance classes
VR Dance World
3 - Al Thanyah 3 - The Greens - Dubai - United Arab Emirates
+971553021251
@Charlestub
2025年4月11日6:27
Устали от бесконечной борьбы с пылью и грязью в вашем доме? Мы понимаем, как сложно найти время на уборку в нашем быстром ритме жизни. Наша компания предлагает профессиональные услуги по чистке квартир и офисов в Санкт-Петербурге. Наша команда знатоков использует только безопасные и эффективные средства, чтобы ваш дом всегда оставался удобным и свежим! Тапайте https://spb24uslugi.ru - Клининг дома Мы печемся о каждом клиенте и обещаем результат, который превзойдет ваши ожидания. Зачем загружать себя на уборку, если можно доверить это профессионалам?
@Jamesaborn
2025年4月18日14:49
Блистательная чистота вашего дома или офиса — это гораздо ближе, чем вы предполагаете! Наша клининговая компания предоставляет профессиональные услуги наведения порядка в Санкт-Петербурге. Мы внимательны о каждом уголке, освобождая вас от рутины и даря возможность упиваться досугом. Используем только безопасные и эффективные средства, а также передовые технологии для получения безукоризненного результата. Двигайтесь к <a href=https://clean-help24.ru>Дезинфекция после смерти</a> Наши козыри: Опытные уборщики, подстраиваемый под ваши нужды график и индивидуальный подход к каждому обратившемуся. Оставьте хлопоты нам и забудьте о проблемах с чистотой. Мы сделаем вашу жизнь легче и комфортнее! Хватит ждать идеального момента и заказывайте уборку прямо сейчас!
@Josephted
2025年4月18日17:20
Разыскиваете проверенную помощь в наведении порядка квартиры в Санкт-Петербурге? Наша команда специалистов гарантирует чистоту и и порядок в вашем доме! Мы применяем только безопасные и действенные средства, чтобы вы могли вкушать свежестью без хлопот. Жмите https://profuslugi24.ru Не упустите уникальную возможность сделать свою жизнь проще и комфортнее.
@KennethGlums
2025年4月18日19:36
Измучились от скучных уборок и вездесущей пыли? Наша компания в Санкт-Петербурге предлагает качественные услуги по уборке жилых так и деловых помещений. Мы заботимся о вашем времени, используя только экологически чистые и действенные средства. Наша команда профессионалов наполнит вашему дому или офису чистоту и порядок, а вам — безмятежность и гармонию. Переходите https://uberu21.ru - Уборка офиса цена за метр Вверьте наведение порядка нам и наслаждайтесь временем, проведенным с родными и друзьями! Запишитесь на безвозмездную консультацию немедленно и получите специальные предложения для вновь прибывших клиентов. Чистота — это не только работа, это наше предназначение!
@uborka_dbka
2025年4月18日21:09
Измучились от пыли и хаоса? Клининговая компания в Санкт-Петербурге предлагает профессиональные услуги по наведению порядка для вашего дома и офиса. Мы применяем только экологически безопасные средства и даём слово непревзойденный порядок! Кликайте https://klining-uslugi24.ru/ По какой причине стоит сотрудничать именно с нами? Быстрая и качественная работа, индивидуальный подход к каждому клиенту и конкурентные цены. Поручите клининг профессионалам и получайте удовольствие от свежести без лишних хлопот!
@uborka_lkka
2025年4月19日14:43
Разыскиваете надежную помощь в наведении порядка квартиры в Санкт-Петербурге? Наша группа специалистов дает гарантию чистоту и и порядок в вашем доме! Мы используем только безопасные для здоровья и действенные средства, чтобы вы могли вкушать свежестью без хлопот. Жмите https://chisto-v-srok.ru - Профессиональная уборка коттеджей
@ArmandoNew
2025年4月20日12:33
Разыскиваете надежную помощь в наведении порядка вашей в Санкт-Петербурге? Наша команда специалистов дает гарантию чистоту и порядок в вашем доме! Мы применяем только безопасные для здоровья и эффективные средства, чтобы вы могли вкушать свежестью без хлопот. Кликайте <a href=https://klining-uslugi24.ru>Уборка квартиры цена</a> Не прозевайте уникальную возможность сделать свою жизнь проще и удобнее.
@KennethGlums
2025年4月22日21:57
Измучились от скучных уборок и вездесущей пыли? Наша компания в Санкт-Петербурге предлагает качественные услуги по уборке как и коммерческих помещений. Мы заботимся о вашем времени, применяя только экологически чистые и действенные средства. Наша команда профессионалов подарит вашему дому или офису сиянием и организованностью, а вам — уверенность и гармонию. Кликайте <a href=https://uberu21.ru>Услуги генеральной уборки квартиры</a> Доверьте уборку нам и наслаждайтесь временем, проведенным с семьей и друзьями! Забронируйте на бесплатную консультацию немедленно и получите бонусные предложения для вновь прибывших клиентов. Чистота — это не просто работа, это наше призвание!
@Josephted
2025年4月22日22:06
Ищете надежную помощь в уборке квартиры в Санкт-Петербурге? Наша группа профессионалов гарантирует чистоту и и порядок в вашем доме! Мы применяем только безопасные и эффективные средства, чтобы вы могли наслаждаться свежестью без хлопот. Жмите https://profuslugi24.ru - Клининговые услуги петербург Не прозевайте шанс сделать свою жизнь проще и удобнее.
@uborka_vxka
2025年4月22日22:14
Ищете проверенную помощь в уборке квартиры в Санкт-Петербурге? Наша команда специалистов гарантирует чистоту и порядок в вашем доме! Мы используем только безопасные для здоровья и эффективные средства, чтобы вы могли вкушать свежестью без хлопот. Перемещайтесь к <a href=https://chisto-v-srok.ru>Генеральная уборка квартиры стоимость</a>
@KennethGlums
2025年4月23日5:34
Наведение порядка в СПб! Избавьтесь от забот, доверьтесь профессионалам! Не откладывайте на потом Жмите https://uslugi-cleaninga.ru
@Jamesaborn
2025年4月23日8:46
Наведение порядка в СПб! Перестаньте паниковать, передайте заботы в руки специалистов! Не откладывайте на потом Нажимайте <a href=https://uborka-spb24top.ru>Уборка квартир после ремонта</a>
@AllenGoody
2025年4月25日9:56
Уборка в Санкт-Петербурге! Перестаньте паниковать, доверьтесь профессионалам! Сделайте шаг к чистоте уже сегодня Кликайте https://service-cleanspb.ru - Услуги клининга цены
@HaroldPef
2025年4月26日22:51
Мобильная чистка в СПб и области вокруг! Мягкая мебель, ковры, удобные сиденья - вернём чистоту и свежести прямо у вас в квартире! Звоните! Выбирайте https://himchistka-spb24.ru
@VictorPlery
2025年4月27日1:24
Мягкая мебель утратила былй лоск? Химчистка мебели на дому в СПб! Вернем диванам, креслам и коврам их истинную красоту. Профессиональные средства и знающие свое дело мастера. Скидки первым клиентам! Узнайте подробности! Кликайте https://himchistka-divanov-spb24.ru - Химчистка мебели петербург
@cialis-deshevo.ru
2025年4月28日7:01
Магазин дженериков по адресу https://cialis-deshevo.ru предлагает
широкий выбор препаратов для повышения потенции с доставкой
@Frankbox
2025年4月30日21:31
Нажимайте <a href=https://uslugi-uborki-spb24.ru>Сколько стоит уборка после ремонта</a>
@VictorPlery
2025年4月30日22:03
Мягкая мебель утратила былй лоск? Воскрешение мягкой мебели на дому в городе на Неве! Подарим вторую жизнь диванам, креслам и коврам их истинную красоту. Профессиональные средства и знающие свое дело мастера. Бонусы новобранцам! Узнайте подробности! Перемещайтесь к https://himchistka-divanov-spb24.ru - Химчистка офисного ковролина
@Dennislet
2025年4月30日23:46
Сияющий дом в Питере! Чистота в апартаментах, блеск в офисах, домов. С гарантией, в срок, на совесть! Свободное время - ваш подарок! Жмите https://uborka-spb24top.ru
@HaroldPef
2025年5月1日5:07
Мобильная чистка в СПб и области вокруг! Мягкая мебель, ворсистые покрытия, удобные сиденья - вернём чистоту и свежести прямо у вас дома! Набирайте номер! Заходите https://himchistka-spb24.ru
@DavidHaK
2025年5月1日18:23
Спасение диванов в столице! Вернём вашему дивану былую красоту! Избавим от пятен и неприятных ароматов. С мастерством и с заботой! Записывайтесь прямо сейчас! Перемещайтесь к https://himchistka-msk24.ru
@Robertbaf
2025年5月2日0:42
Химчистка диванов в Москве! Вернем к жизни вашему дивану былую красоту! Удалим пятен и запахов. С мастерством и с заботой! Записывайтесь прямо сейчас! Заходите https://himchistka-divanov-msk24.ru/
@Carternut
2025年5月2日19:33
Уборка квартир в СПб! Забудьте о быте, наслаждайтесь чистотой. Мастерски, оперативно, недорого. Закажите сейчас! Кликайте https://uborka-kvartir24top.ru - Уборка квартиры после смерти человека
@poxetmsk.ru
2025年5月4日20:13
Продажа дженериков для мужчин на сайте https://poxetmsk.ru большой
выбор доступные цены гарантия качества
@Robertwar
2025年5月6日0:18
Двигайтесь к https://himchistka-divanov-msk24.ru - Стоимость химчистки ковролина
@RussellSam
2025年5月6日23:55
Заходите <a href=https://himchistka-divanov-spb24.ru>Отдать матрас в химчистку</a>
@DavidSCexy
2025年5月8日16:46
Двигайтесь к https://himchistka-spb24.ru - Химчистка ковролина на дому стоимость
@Thomasbog
2025年5月8日20:59
Блеск и порядок в бизнесе в Питере! Чистота - залог продуктивной работы! Профессиональный клининг. Выгодные условия. Звоните! Жмите <a href=https://uborka-ofisov24spb.ru>уборка офисных помещений цена</a>
@AntonUncor
2025年5月9日19:15
Уборка домов в Санкт-Петербурге и ЛО! Клининг экспертного уровня для вашего комфорта. Поддержим чистоту и уют. Не откладывайте! Перемещайтесь к <a href=https://uborka-domov24spb.ru>Клининговые услуги петербург</a>
@Josephpyday
2025年5月10日14:01
Перемещайтесь к https://himchistka-msk24.ru
@Jimmydip
2025年5月10日22:53
Финишная прямая чистоты? Забудьте о строительной пыли! Профессиональная уборка квартир и домов. Оперативно, тщательно, с гарантией! Выбирайте https://klining-posle-remonta24spb.ru
@AaronCam
2025年5月11日3:33
Выбирайте https://uslugi-cleaninga.ru
@Jamessed
2025年5月12日2:20
Тапайте <a href=https://uberu21.ru>Клининговые услуги уборка офисов</a>
@Carlosnatry
2025年5月12日17:30
Заходите https://clean-help24.ru/
@mob.genmens.ru
2025年5月13日16:08
В интернет магазине https://mob.genmens.ru/ представлен широкий ассортимент дженериков для повышения
потенции производства Индии.Высокое качество по доступным ценам в Санкт-Петербурге и Москве
отправка в другие регионы почтой России.Действуют накопительные скидки для постоянных клентов
гарантированная анонимность заказа.
@JesseVap
2025年5月13日22:14
Двигайтесь к https://chistka-mebel24spb.ru/
@Matthewbub
2025年5月15日4:55
Тапайте https://himchistka-spb24speed.ru - Чистка мягкой мебели на дому в СПб
@Norberttausa
2025年5月15日6:24
Перемещайтесь к https://uslugi-uborki-spb24.ru
@RichardWab
2025年5月16日18:46
Двигайтесь к https://kliningovaya-uborka-spb.ru
@LloydAwamp
2025年5月18日2:20
Загрязнения на мягкой мебели? Освежим ей свежий вид! Химчистка мягких уголков, кресел, ковров в столице. Нажимайте https://himchistka-divanov-msk24.ru - Химчистка матрасов в Москве
@WallaceGut
2025年5月19日20:43
Очистка в Санкт-Петербурге! Апартаменты, Коттеджи, Кабинеты. Высококлассный сервис по доступным ценам. Освободите свой график! Закажите клининг немедленно! Перемещайтесь к https://uborka-top24.ru - Уборка квартир после ремонта СПб
@DanielTip
2025年5月20日23:49
Клининг апартаментов в СПб! Больше времени на себя, а не на уборку! Качественный клининг. Цены от 1590 руб.. Закажите сейчас! Перемещайтесь к https://uborka-kvartir24top.ru
@Robertgroup
2025年5月21日22:52
Жмите https://uborka-v-spv24pro.ru
@login spinmama
2025年6月10日21:02
Virtual gambling platforms have changed the gambling industry, delivering a unique kind of accessibility and selection that physical establishments don’t provide. Over time, millions of players across the globe have welcomed the adventure of digital casino play in light of its ease of access, engaging traits, and progressively larger selection of games.

One of the strongest selling points of internet-based platforms is the incredible range of games at your disposal. Whether you love spinning traditional one-armed bandits, playing through story-driven modern slot games, or strategizing in strategy-based games like Blackjack, casino websites boast endless choices. Plenty of operators even present real-time gaming experiences, letting you to communicate with actual dealers and fellow gamblers, all while immersing yourself in the realistic atmosphere of a physical gaming house in your own space.

If you’re new with the world of virtual gambling or want to explore trusted platforms, why not participate in our lively social network? It’s a destination where gamblers exchange experiences, assisting you to get the most out of your gaming journey. Check out the conversation and check it out now: <a href=https://x.com/Spinmama_Bonus>spinmama login</a> .

Adding to the extensive catalog, internet-based gambling hubs stand out accessibility.
@50style.ru
2025年6月11日17:13
https://50style.ru/
@misterdick.ru
2025年6月19日20:42
Приглашаем посетить наш интернет магазин https://misterdick.ru/ по
продаже дженериков в Москве с быстрой доставкой по МСК в день заказа.
Высокое качество дженериков производства Индии в наличии для покупки.
Так же отправляем заказы во все регионы почтой России
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信