スポンサーリンク
IT技術 副業

システム方式設計書:「ログ出力方式」の書き方

IT技術

システム方式設計書(アプリケーション方式設計書)にはどんなことを書くべきか?
必要だから作っているシステム設計書。
かけた労力の割に役に立っていない。
何のために書いているのかわからない。
なんてことはないでしょうか。
役に立つシステム方式設計を作るために必要なことを解説します。
今回は、ログ出力方式です。

スポンサーリンク

ログ出力方式に書くこと

ログ出力方式にはログに出力したいことを中心に記載していくとよいでしょう。
ほかの方式設計と大きく異なる点は、要件の整理をすることが中心になります。
当サイトで推奨している構成では「概要」の記載が中心となります。

当サイトで推奨しているシステム方式設計の書き方は過去記事をご覧ください。

ログ出力の仕組みは、既存部品を利用することが多いので設計する項目は少ないです。
ログ出力部品を作成する場合は、しっかり設計をしてください。

ログ出力方式の「概要」に書くこと

出力するログに対する要件を整理します。
ログ出力は既存部品を使うことが多いので、部品の仕様を念頭に置いて実現可能な範囲で要件を決めていくといいでしょう。
具体的には次のような要件について決めていきましょう。
・ログの種類
・どのようなログレベルを設けるのか
・ログレベルごとの利用目的
・出力内容(フォーマット)
・ログレベルごとに出力する場所のルール
・ログ出力先(ファイルの出力先、DBなど)
・ログローテーションの要件
・ログ閲覧機能の要否
・定義ファイルについて(変更した時の反映タイミングなど)

ログの種類

ログの出力目的を整理します。
例えば次のようなイメージです。

エラーログエラーが起きたときに出力するログです。
稼働ログサービスの開始や終了を通知するためのログです。
トレースログシステムの動作を追跡するためのログです。
プログラムの要所に仕込み、トラブルが起きたときにどこまでプログラムが動作したかを追跡するために使います。
デバッグログトラブルが起きたときに原因の追跡のために必要な情報を出力します。
アクセスログ利用者がログインした時などの記録を残すためのログです。
操作ログ利用者が行った操作を記録するためのログです。
エラーが起きたときになどに原因となる操作を追跡するために利用します。

ログレベル

ログの出力レベルを決めます。
ログの監視を行う場合は、ログレベルによってシステム管理者へ通知をしたりアラートを出すなどの仕組みを用意します。

FATAL想定外のエラーやシステムエラーが起きた場合
ERRORシステムは処理を継続できるレベルで、アプリケーションとして想定しているエラー
WARNシステムの動作に問題はなく、警告として出力する必要がある場合
INFO処理の証跡や利用者の操作を残す場合
DEBUGトラブルが起きたとき調査する場合に利用する。通常は出力せず、調査時に出力するように設定変更する。

ログの種類ごとにどのレベルで出力するのかも決めます。

FATALERRORWARNINFODEBUG
エラーログ
稼働ログ
トレースログ
デバッグログ
アクセスログ
操作ログ
フォーマット

ログにどのような内容を出力するのかを決めます。
例えば、出力日時、クライアントのIPアドレス、エラーレベル、エラーの内容などです。

出力日時出力対象にログを出力した日時
IPアドレスクライアント側端末のIPアドレスを出力する
コンピュータ名クライアント側端末のコンピュータ名を出力する
OSバージョンクライアント側端末のOSバージョンを出力する
アプリケーションバージョンクライアント側端末のアプリケーションバージョンを出力する
アプリケーションIDクライアント側端末のアプリケーションIDを出力する
アプリケーション名クライアント側端末のアプリケーション名を出力する
クライアントログインIDクライアント側端末のクライアントログインIDを出力する
クライアントMACアドレスクライアント側端末のクライアントMACアドレスを出力する
セションIDセションIDを出力する
ログインIDログインIDを出力する
テナントIDテナントIDを出力する
Webサーバ名Webサーバ名を出力
スレッドIDアプリケーションのスレッドIDを出力する
プロセスIDアプリケーションのプロセスIDを出力する
ログ出力日時アプリケーションでログが出力された日時を出力する
レイヤー名アプリケーションでログを出力したレイヤー名を出力する
クラス名アプリケーションでログを出力したクラス名を出力する
クラス名(名前空間なし)アプリケーションでログを出力したクラス名(名前空間なし)を出力する
メソッド名アプリケーションでログを出力したメソッド名を出力する
引数アプリケーションでログを出力したメソッドの引数を出力する
ファイル名アプリケーションでログを出力したファイル名を出力する
行番号アプリケーションでログを出力したクラスファイルの行番号を出力する
追跡情報アプリケーションでログを出力したメソッドのメソッドのスタックトレースを出力する
Publicフィールドログ出力時のPublic変数の値(データセットなど)を出力する
発行SQL文発行したSQL文を出力する
ログレベルログ出力レベルを出力する
メモリ使用量ログ出力時のメモリ使用量を出力する
CPU使用率ログ出力時のCPU使用率を出力する
メッセージ内容ログ出力時に設定したメッセージを出力する
対処方法ログ出力時に入力した対処方法を出力する
ログ出力場所

ログの出力をどのような場所に仕込むかを決めます。
例えばデバッグログの場合、各メソッドの開始と終了時に出力できるように仕込みをするなどのルールを決めます。
開発者はこのルールに従ってプログラム中にログの出力を実装する必要があります。

ログ出力先

ログを出力する先を決めます。
特定のフォルダにログファイルとして出力するのか。
その場合のファイル名などのルール。
もしくはDBへ出力するのかなどです。

ログローテーション

特にファイルにログを出力する場合、同じファイルに出ロクし続けるとログファイルが膨大になります。
定期的にログファイルを分けることを検討します。

ログ閲覧機能

出力したログをどのように閲覧するかを検討します。
ログを表示するためのアプリケーションを作成する場合もあります。
ログファイルがテキストファイルの場合、特に閲覧機能を用意しないこともあります。

定義ファイル

ログの出力内容や、出力の要否を制御する設定ファイルを設ける場合、どのような設定をするのか決めます。
また、システムの稼働中に定義ファイルを変更した場合、変更内容が反映されるタイミングも明確にします。
例えば、定義ファイルの内容を変更した瞬間に動作が変わるのか、システムを再起動したときに反映されるのかなどです。

ログ出力方式の「方式設計」に書くこと

ログ出力方式の方式設計にはログ出力の仕組みを書きましょう。
多くの場合は既存部品を使うのであまり書くことはありません。
構築するアプリケーションからログ出力部品を呼び出して、出力先の媒体までのつながりを絵にするなどでよいでしょう。

ログ部品を自作る場合は仕組みの設計をします。
ログ出力の場合はメインの処理とは非同期で出力する。
ログ出力部品でエラーが起きてもメイン処理には影響を与えない仕組み。
など、技術的にクリアする課題はたくさんあります。

ログ出力方式の「実装方式」に書くこと

実装方式に書くことは一つです。
ログ出力部品の使い方です。
設定するパラメータなど具体的に決めましょう。
ログ出力はいろいろな使い方をする必要はありません。
このシステムの中ではすべて同じ使い方になることが重要です。

コメント

タイトルとURLをコピーしました