インデントの付いたログを出力する

プログラムが出力したログを追っているときにインデントされていたら良いな〜っと思ったことは無いでしょうか?
関数などの呼び出し回数に伴ってインデントされて出力されたら結構追いやすいものです。
なのでインデントを付けて出力してみました。(昔にやってたけど)

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

ログを実際に出力している箇所が集中していれば手を加えるのも簡単かと・・・
まあ、遅くなるけどデバッグで追うときくらいなのでいいかな。