(57)【要約】前処理スクリプトは、ロギング命令のメッセージカタログを解析する。たとえば、各レコードは、区別可能なログメッセージと、フォーマット文字列と、変数と説明のためのプレース・ホルダーとを含む。スクリプトは、メッセージカタログに格納された各メッセージのタイプを定義するヘッダファイルを生成する。スクリプトは、次に、メッセージのタイプ毎にマクロを定義する。プログラマがコードを記述するとき、プログラマは、標準言語フォーマットよりもマクロフォーマットを使用する。マクロは、コンパイルの際に、包括的ロギング呼び出しの特定のインスタンスに要求される引数の型及び個数に対応した関数を呼び出す。コードが最終的にコンパイルされたとき、コンパイラは、引数の個数及び型が適合しない場合にエラーメッセージを生成する。
2004516574.tif 000002
【特許請求の範囲】
【請求項１】
最終的にロギング動作を実行する命令を含む関数を定義し、
該関数は、引数の個数と型のうち少なくとも一方が特定のロギング動作に特有である少なくとも１個の引数を含み、
該命令は引数の個数と型のうちの少なくとも一方に制限されない命令であり、
プログラム中で該関数を呼び出し、該特定のロギング動作に特有である該個数と型のうちの少なくとも一方の不一致が該プログラムをコンパイルすることによって明らかにされる、
動作をプログラミングする方法。
【請求項２】
該動作はロギング動作である、請求項１記載の方法。
【請求項３】
最終的に実行時にロギング動作を実行する命令を含む関数を定義し、
該関数は、引数の個数と型のうち少なくとも一方が特定のロギング動作に特有である少なくとも１個の引数を含み、
該命令は引数の個数と型のうちの少なくとも一方に制限されない命令であり、
該関数を呼び出し、該特定のロギング動作に特有である該個数と型のうちの少なくとも一方の不一致がコンパイルすることによって明らかにされる、
プログラムを記録したソフトウェア媒体。
【請求項４】
該動作はロギング動作である、請求項３記載のソフトウェア媒体。
【請求項５】
少なくとも引数を要求するプログラム命令に渡される引数の個数と型の少なくとも一方に対応した関数を定義する手順と、
ロギングメッセージのクラスを含むロギングメッセージカタログを作成する手順と、
プログラミング命令を該メッセージカタログに応じて該関数の中の対応した関数に変換するマクロを定義する手順と、
プログラム中で該マクロを参照する手順と、
を有するロギングスクリプトをプログラミングする方法。
【請求項６】
該マクロを定義する手順は、ファイル名及び／又はライン番号を対応したログメッセージに条件付きで添付するマクロを定義する手順を含む、請求項５記載の方法。
【発明の詳細な説明】
【０００１】
〔発明の背景〕
−発明の分野
本発明は、コンピュータソフトウェアにおけるロギング動作を定義するメカニズムに係り、より詳細には、一定の個数及び／又は型の引数を要求するロギング命令に対して、コンパイル時に引数の個数及び型の検査が行われるメカニズムに関する。
【０００２】
−背景
ロギングは、実行中のソフトウェアプロセスで発生するあらゆる形態の検査イベントを表現するため使用される総称的な用語である。ロギングのよく知られた例は、モデムを介してコンピュータに接続する際のステップの追跡である。接続の各ステップが完了すると、ロギングシステムは接続中の端末にメッセージを出力する。エラーが発生した場合、エラーによってプロセスが停止させられる前に、プロセスがどこまで進んでいたかを即座に判定することができる。一般的に、ロギングの結果としてテキストメッセージが生成され、このテキストメッセージは、後で読み出されるまでコンパクトなトークン形式で保持し、読み出す際に、トークンを読み取り可能なテキストで置換してもよい。
【０００３】
ソフトウェアは、屡々、同じコードが異なる言語を使用する様々な地域のユーザのため使用できるように記述される。代替的なロギング命令を実行可能なソフトウェア自体に組み込むのではなく、メッセージカタログが代替的な言語フォーマットを保持するため使用される。ソフトウェアは、ロギング命令のコード又は標準形式だけを生成するように記述され、ロギング命令はカタログを使用して変換される。ロギング命令は、（標準出力が一時的に保持される場合には）ログ出力が読まれるときに変換されるか、或いは、標準形式が生成され、出力装置又は記憶装置へ出力された直後に変換される。
【０００４】
一部のシステムでは、ロギング出力を生成するため使用される命令の引数は、個数が一定であり、型が包括的（総称的）である。たとえば、命令は、フォーマット文字列と、整数、文字列、浮動小数点値などのような多種類のいずれかの型の引数の固定長の系列をとる。このような命令は、オペレーティングシステム、又は、プログラム言語の一部に固有の命令である。引数の個数が一定である場合、たとえば、必ずしも全部の引数を使用しなくてもよい。特定のフォーマット命令が引数と適合しなくても、引数が任意の型をとり得る場合、それらの呼び出しが正確にプログラミングされることを保証することは困難である。その理由は、コンパイル中に、引数に関して、定義された特定のロギングイベントに適当な型及び／又は個数の検査が行われないからである。唯一の代案は、実行することによってロギング命令をテストすることである。しかし、これは、大変な作業であり、実施できない場合もよくある。結局、実時間テストは、ロギングエラーが発生したかどうかについて都合のよい表示を与えない。最近のオブジェクト指向（ＯＯ）言語は、ある種の解を与えるが、一部のシステム、たとえば、組み込みシステムの場合、ソフトウェアの作者は、少なくとも一部のコードに関して非オブジェクト指向言語に制限される場合がある。
【０００５】
〔発明の概要〕
本発明は、言語用ではなく、多種多様なロギング命令のためのメッセージカタログに依存する前処理スクリプトを与えることによって、従来技術において生じる上述の問題を解決する。メッセージカタログはメッセージ構造体を含み、各メッセージ構造体はレコードに定義される。各レコードは、たとえば、区別可能なロギングメッセージと、フォーマット文字列と、変数及び説明のためのプレース・ホルダーと、を含む。プレース・ホルダーは、コンパイラのロギングシステムが包括的命令の形式をとり、その後に、フォーマット命令及び固定数の引数が続く場合に適切であろう。
【０００６】
本発明は、レコード毎に要求される引数の個数を判定するためメッセージカタログを解析する前処理スクリプトを使ってメッセージカタログを使用する。スクリプトは、メッセージカタログに定義されたメッセージの各型に対しマクロを定義するヘッダファイルを生成する。プログラマがコードを記述するとき、プログラマは、標準言語フォーマットではなく、マクロフォーマットを使用する。マクロは、コンパイルの際に、標準言語フォーマットに呼び出し形が含まれる関数を呼び出す。しかし、関数は、特定のメッセージによって要求される引数の型及び／又は個数に特有の関数である。コードが最終的にコンパイルされたとき、前置プロセッサは、全てのマクロを、引数の個数及び／又は型に対応した関数呼び出しで置換する。この場合、コンパイラは、引数の個数及び／又は型が一致しないとき、エラーメッセージを発生する。
【０００７】
以下では、本発明がよりよく理解されるように、幾つかの好ましい実施例に関して、添付図面を参照して、本発明を説明する。図面に関しては、図示されている詳細は、一例であり、本発明の好ましい実施例を例示的に説明するためのものであり、本発明の原理及び概念的な局面の最も有効で、かつ、容易に理解されるであろうと考えられる記述を提供するために提示されている。この点に関して、本発明の基本的な理解のために必要以上に詳細に本発明の構成上の細部を説明しようとしていないが、当業者は、添付図面を参照して以下の説明を読むことによって、本発明の幾つかの実施形態がはっきりと理解できるであろう。
【０００８】
〔好ましい実施例の詳細な説明〕
図１を参照するに、プログラマは、新ロギング出力を生成する呼び出しを追加することによって、定期的に新しいソースコードを記述するか、又は、旧いソースコードを更新する。このようなロギング呼び出しが旧いコードに予め収容されていないタイプの呼び出しである場合、或いは、新プログラムを設計中である場合、新しいメッセージタイプが存在し（Ｓ１０）、新しいメッセージカタログ若しくは更新されたメッセージカタログがステップＳ２０で生成される。メッセージカタログは、ロギングメッセージタイプのリストである。本発明の一実施例において、メッセージカタログは以下の表に示されるようなフォーマットをもつ。
【０００９】
【表１】
2004516574.tif 000003
メッセージの各タイプに要求される引数の個数及び／又は型を必要とする関数がステップＳ２５で定義される。これらの関数は、ロギングメッセージタイプのクラスに包括的な関数である。たとえば、１個の引数を要求するメッセージ用の制限的な関数、２個の引数を要求するメッセージ用の関数などが存在する。或いは、引数の個数と型の組合せ毎に別々の関数を準備してもよい。
【００１０】
ステップＳ３０において、メッセージカタログが解析され、メッセージカタログにロギングメッセージのタイプ毎に（すなわち、各レコードに対して１個ずつ）マクロ定義を作成するヘッダが生成される。得られた新ヘッダファイルは、ステップＳ４０で、新ソースコードファイルに追加されるか、又は、旧ヘッダファイルを置き換え、新メッセージタイプに基づく新ソースコードがソースコードに追加される。次に、ステップＳ５０でコンパイラが実行され、引数の個数若しくは型の不一致によって生ずるエラーが検査され、適切な訂正動作がステップＳ６０で行われる。
【００１１】
Ｃ言語ファイルの一部分におけるヘッダの一例は、
2004516574.tif 000004
である。
【００１２】
プログラマは、自分の作成するコードにログ呼び出しマクロを使用することができる。たとえば、以下の命令が現れる。
2004516574.tif 000005
で置き換えられる。
【００１３】
このように、コンパイラが予備コンパイルステップ中にこれらの命令のうちの一つの命令を見つけたとき、コンパイラは、マクロテキストを、ログ呼び出しマクロ定義に規定されているような関数呼び出しで置き換える。すなわち、
2004516574.tif 000006
に変更され、ここで、”０ｘＮＮＮＮ”は特定のロギングイベントのメッセージ番号を表わし、”ＸＹＺ”はマクロ命令で使用される引数を表わす。
【００１４】
重要な点は、ログ呼び出し定義において、異なる関数が引数の個数に依存して使用されることに注意する必要がある。関数は、ロギング出力を生成するため要求されるステップを実際に実行する。各関数は適切なロギング命令を含むが、この関数定義内では、従来技術におけるのと同様に、命令は、引数の個数及び型に関して一致している。引数を、要求された引数の個数及び型に対応した関数へ渡すことにより、夫々の関数は、マクロ定義で要求されたログイベントの型に関連付けられ、コンパイラは、コンパイル中にマクロ命令中の引数の個数及び型をチェックできるようになる。これにより、実行時の前に不適切な構文が出現した場所が正確に示される。
【００１５】
次に、関数定義のリストの一例を記載する。以下のコードは、４個の引数をとるロギング関数を定義する。
2004516574.tif 000007
このコード系列において、”ｆｏｒｍａｔ”はメッセージフォーマットの配列であり、”ｍｓｇＮｕｍｂｅｒ”はフォーマット配列へのインデックスであり、”ｌｏｇＭｓｇ”は標準システムロギング呼び出しであり、その引数の個数は固定の７個であり、引数の型は、１番目が文字列型であり、残りの６個の引数は整数型である。
【００１６】
図２及び図３を参照して、ロギング出力の作成に関する従来技術の方法と本発明による方法を比較する。従来技術の方法は図２に示され、本発明による方法は図３に示されている。
【００１７】
従来技術の方法において、包括的呼び出し１００は、通常のメカニズムである、オペレーティングシステム装置のような関数ライブラリ、又は、プログラミング言語に限定されない命令を用いて利用可能である。包括的呼び出し１００は、多数のパラメータをもち、どのパラメータが使用されるかは、命令のインスタンスに使用される他のパラメータに依存する。
【００１８】
本発明の方法では、包括的呼び出し１００は、特定のロギング操作（たとえば、ロギングデータをキューに入れるような操作）に特有の引数の個数及び／又は型をもつように定義された関数１５０によって間接的にアクセスされる。この関数定義は、適切な包括的構文を含み、関数の引数を包括的呼び出し１００の引数へ適切に渡す。適切なパラメータの組１４０を備えた関数呼び出し１３０は、プログラムの実行時に、適切なロギングイベントを作成するため、プログラマのコードで使用される。媒介する関数の結果として、引数の個数及び／又は型は、実行時ではなく、コンパイル時に検査され得る。
【００１９】
図４を参照するに、関数呼び出しをマクロ経由で渡し、マクロ定義プロセスを自動化することによって、ロギングメッセージシステムは、エラー検査のため使用され得る単調な診断機能を実現できる。たとえば、ファイル名称及びライン数は、ログメッセージに条件付きで添付される。ここで、コンパイルコマンドを発行するとき、コンパイラオプションを指定することが可能である。典型的に、コンパイラオプションのうちの一つは、開発用、又は、製品発売用のコンパイルである。これは、「条件付き」によって表わされる条件である。すなわち、２組のマクロ定義が作成される。一方の組は、付加的な診断情報であるファイル名称及びライン番号を含み、他方の組は、この付加的な診断情報を含まない。２組のマクロ定義は、次に、予備コンパイラ条件付き指令、すなわち、ｉｆ／ｔｈｅｎ／ｅｌｓｅ文によって囲まれる。コードが開発用にコンパイルされるとき、付加情報を含む組が使用される。コードが製品発売のためコンパイルされるとき、顧客は付加情報に関心が無いので、別の組が使用される。これは、前置プロセッサスクリプトを、ファイル名及びライン番号用の予備コンパイラ指令をマクロ定義に添付することによって実現され得る。たとえば、
2004516574.tif 000008
のように表わされる。これは、プログラマの補助が無くても実行可能であり、開発用にはオンにされ、製品用にはオフにされる。このように、メッセージカタログ２００は、診断情報を含むマクロ定義を作成するため、マクロスクリプト２１０によって解析される。
【００２０】
当業者にとって明らかであるように、本発明は、上述の説明用の実施例の詳細に限定されることはなく、本発明は、本発明の精神若しくは基本的属性を失うことなく、他の特定の形態で実施される。したがって、本発明の実施例は、全ての局面において、例示であると解されるべきであり、限定的に解釈されるべきではなく。本発明の範囲は、上述の説明によって定められるのではなく、請求項の記載によって示されるものであり、請求項に記載された事項と等価な意味と範囲に含まれるすべての変更は、本発明の範囲に包含されることが意図されている。
【図面の簡単な説明】
【図１】
本発明の一実施例によるロギング呼び出しエラー検査処理のフローチャートである。
【図２】
従来技術によるロギング呼び出し作成方法を説明するブロック図である。
【図３】
本発明の一実施例によるロギング呼び出し作成方法を説明するブロック図である。
【図４】
コンパイル時に示される診断情報を得るためマクロの自動生成を使用する本発明の一実施例によるロギング呼び出し作成方法を説明するブロック図である。
【図１】
2004516574.tif 000009
【図２】
2004516574.tif 000010
【図３】
2004516574.tif 000011
【図４】
2004516574.tif 000012
【国際公開パンフレット】
2004516574.tif 000013
2004516574.tif 000014
2004516574.tif 000015
2004516574.tif 000016
2004516574.tif 000017
2004516574.tif 000018
2004516574.tif 000019
2004516574.tif 000020
2004516574.tif 000021
2004516574.tif 000022
2004516574.tif 000023
2004516574.tif 000024