呼出元のクラス名を取得する方法
JavaのロガーであるApache log4jでは、ログ出力のレイアウトで%Cを指定すると、「呼出元のクラス名」を出力してくれます。
しかし、一般的にJavaではそのような情報を取得することはできません。
ソースを少しだけ追ってみますと、(少なくともlog4j-1.2.15では)非常に汚いことをやっています。
LocationInfoというクラスがあるのですが、例外を投げてcatchし、そのスタックトレースの中身を文字列として取得し、そこからクラス名を取得しているのです。この手法は思いつかないでもなかったのですが、笑い話のような扱いでした。
こんなことをさせるくらいならば、もう少しきれいな方法を言語で提供することはできないのでしょうか?