Уже есть несколько предложений для достижения того, чего вы хотите. Либо используйте объект StackTrace, либо лучше log4net.
В Java, чтобы получить эту информацию, мне пришлось выбросить исключение и поймать его.
Это не совсем так. Вы можете иметь это без исключений тоже. Посмотрите на log4j. Он даже регистрирует ваш метод и имя класса, не загрязняя ваш код жестко закодированными строками, содержащими текущее имя метода (по крайней мере, я видел это в некоторых случаях).
Почему эти старые резервы так игнорируются в современных языках программирования?
Java и C # не используют (в последнем случае: чрезмерное использование) препроцессоры. И я думаю, что это хорошо. Злоупотреблять препроцессорами для создания нечитаемого кода очень легко. И если программисты могут злоупотреблять какой-либо техникой ... они будут злоупотреблять ею.
Просто заметка о производительности, которая, скорее всего, будет следующей, которая всплывает у вас в голове:
Если вы используете StackTrace или log4net, вы всегда будете читать или слышать, что он медленный, потому что он использует Reflection. Я использую log4net, и я никогда не сталкивался с ведением журнала в качестве горлышка производительности бутылки. Если это так, я могу декларативно деактивировать (части) журналирование - без изменения исходного кода. Это чистая красота по сравнению с удалением всех строк журнала в коде C / C ++! (Кроме того: если производительность является основной целью, я бы использовал C / C ++ ... она никогда не умрет, несмотря на Java и C #.)