metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-08-28 02:31 pm

Странное

А вот почему ни в одном имеющемся под руками языке программирования нет функции "компилятор сам подставляет в вызов логгера имя функции, из которой его вызвали"?
Я понимаю, в log4net я могу подключить вывод фреймов стека, прямо в конфиге, но они достаточно знатно все тормозят в рантайме, а так бы на этапе компиляции подставлять имена функций в виде строковых констант.
В препроцессорах C и C++ есть __LINE__ и __FILE__, а больше я ничего подходящего вроде и не видел.

[identity profile] jakobz.livejournal.com 2012-08-28 12:17 pm (UTC)(link)
О, а кстати в .net-то есть такое:
using System.Diagnostics;

// get call stack
StackTrace stackTrace = new StackTrace();

// get calling method name
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);

[identity profile] xeno-by.livejournal.com 2012-08-28 12:20 pm (UTC)(link)
Помню, я где-то читал, что эта штука может факапнуться из-за инлайнинга.

[identity profile] xeno-by.livejournal.com 2012-08-28 12:20 pm (UTC)(link)
Плюс, да, тормозит.