- PR -

実行中のメソッドをメソッド内で取得する

投稿者投稿内容
siop
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 67
投稿日時: 2004-12-16 14:16
良くやりそうなことなんですが、なかなか見つからないので
質問させてもらいました。

質問は、実行中のメソッドをメソッド内で取得する方法です。

Webサービス内で、実行時のトレースログを取得するため、
メソッドの開始時と終了時にログを出力したいと思っています。

Public Class Table
 Public Sub insert()
  log.out(Me.GetType().Name & " - insert START")
  :
  :
  :
  log.out(Me.GetType().Name & " - insert END")
 End Sub
End Class

上記でも、クラス名、メソッド名を出力することができますが、
入力ミスがあった場合、意味をなさなくなってしまいます。

メソッド内で一律の書き方が可能であれば、
その方法を採用したいと思っているのですが、
良い方法はありますでしょうか?

また、トレースのためにログ出力を行う手法についても
ご意見があればお願いします。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-12-16 14:45
引用:

siopさんの書き込み (2004-12-16 14:16) より:
メソッド内で一律の書き方が可能であれば、


System.Reflection.MethodBase.GetCurrentMethod()で取れることはとれます。
siop
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 67
投稿日時: 2004-12-16 15:01
引用:

System.Reflection.MethodBase.GetCurrentMethod()で取れることはとれます。



なるほど。じゃあ、先ほどのソースは、こうなるわけですね。

Public Class Table
 Public Sub insert()
  log.out(Me.GetType().Name & " - " & System.Reflection.MethodBase.GetCurrentMethod() & " START")
  :
  :
  :
  log.out(Me.GetType().Name & " - " & System.Reflection.MethodBase.GetCurrentMethod() & " END")
 End Sub
End Class

1行が長くなってしますね。
また、各メソッドに記述しないといけないので大変ですね。
共通メソッドを作成するわけにもいかないし・・・。(共通メソッド名が出力されてしまう。)

なんかうまい方法ないかな〜。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-12-16 15:21
Importsしちゃだめ?
_________________
たつごろー
codeseek
こみゅぷらす
siop
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 67
投稿日時: 2004-12-16 15:36
引用:

Importsしちゃだめ?


一瞬、何のことか悩んでしまいました・・・。

こんな感じってことですね。

Imports System.Reflection.MethodBase
Public Class Table
 Public Sub insert()
  log.out(Me.GetType().Name & " - " & GetCurrentMethod.Name & " START")
  :
  :
  :
  log.out(Me.GetType().Name & " - " & GetCurrentMethod.Name & " END")
 End Sub
End Class

ログ出力内容などの編集をどうにかすれば、そんなに気にならなそうですね。

#Webサービスのトレース手法について、何かあればお願いします。

todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-12-16 16:13
StackTraceとか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=11733
siop
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 67
投稿日時: 2004-12-16 17:04
引用:

StackTraceとか。



これは、かなりの情報を取得できますね。
メソッド開始、終了のトレースログとしては、多いかも知れませんが、
Exception時のログとしてはいいですね。

ありがとうございました。

よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-12-17 00:18
引用:

siopさんの書き込み (2004-12-16 14:16) より:
Webサービス内で、実行時のトレースログを取得するため、
メソッドの開始時と終了時にログを出力したいと思っています。



StackFrameクラス使ってはいかがですか。
これを使うと共通メソッド化もできます。

'例) このメソッドを各メソッドで呼ぶと・・・
Public Sub DebugWriteLineMethodName()
Debug.WriteLine(New StackFrame(1).GetMethod.Name)
End Sub

スキルアップ/キャリアアップ(JOB@IT)