インデントの付いたログを出力する
プログラムが出力したログを追っているときにインデントされていたら良いな〜っと思ったことは無いでしょうか?
関数などの呼び出し回数に伴ってインデントされて出力されたら結構追いやすいものです。
なのでインデントを付けて出力してみました。(昔にやってたけど)
vb.net でコードを記述していますが C# とか .NET Framework であれば同じように作れるんじゃないかと。
もち、納品時にはインデント無しですのでデバッグ用ですけどね。
まず結果から「インデント無しログ
Main Start AAA Start BBB Start CCC Start CCC End BBB End CCC Start CCC End AAA End BBB Start CCC Start CCC End BBB End CCC Start CCC End Main End
「インデント有りログ」
Main Start AAA Start BBB Start CCC Start CCC End BBB End CCC Start CCC End AAA End BBB Start CCC Start CCC End BBB End CCC Start CCC End Main End
「実験コード」
Module IndentLog Sub Main() Call Log("Main Start") Call AAA() Call BBB() Call CCC() Call Log("Main End") End Sub Sub Log(ByVal sMsg As String) Dim sBuldMsg As String = sMsg #If DEBUG Then ' スタックトレースの情報を取得してメソッドコールの呼び出し階層を取得してログにインデントを付ける Dim objStackTrace As StackTrace = New StackTrace sBuldMsg = StrDup(objStackTrace.FrameCount - 1, " ") + sBuldMsg objStackTrace = Nothing #End If Debug.WriteLine(sBuldMsg) End Sub Sub AAA() Call Log("AAA Start") Call BBB() Call CCC() Call Log("AAA End") End Sub Sub BBB() Call Log("BBB Start") Call CCC() Call Log("BBB End") End Sub Sub CCC() Call Log("CCC Start") Call Log("CCC End") End Sub End Module
ログを実際に出力している箇所が集中していれば手を加えるのも簡単かと・・・
まあ、遅くなるけどデバッグで追うときくらいなのでいいかな。