![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
А вот почему ни в одном имеющемся под руками языке программирования нет функции "компилятор сам подставляет в вызов логгера имя функции, из которой его вызвали"?
Я понимаю, в log4net я могу подключить вывод фреймов стека, прямо в конфиге, но они достаточно знатно все тормозят в рантайме, а так бы на этапе компиляции подставлять имена функций в виде строковых констант.
В препроцессорах C и C++ есть __LINE__ и __FILE__, а больше я ничего подходящего вроде и не видел.
Я понимаю, в log4net я могу подключить вывод фреймов стека, прямо в конфиге, но они достаточно знатно все тормозят в рантайме, а так бы на этапе компиляции подставлять имена функций в виде строковых констант.
В препроцессорах C и C++ есть __LINE__ и __FILE__, а больше я ничего подходящего вроде и не видел.
no subject
Date: 2012-08-28 11:35 am (UTC)no subject
Date: 2012-08-28 11:45 am (UTC)no subject
Date: 2012-08-28 06:15 pm (UTC)no subject
Date: 2012-08-28 11:38 am (UTC)no subject
Date: 2012-08-28 11:38 am (UTC)В зависимости от компилятора.
no subject
Date: 2012-08-28 11:39 am (UTC)no subject
Date: 2012-08-28 11:40 am (UTC)Уж на что в дотнете это просто делается, да и то бывает лениво. Последнее время компилирую всё с отладочной информацией, консольный вывод перенаправляю в файл. Вот и лог нахаляву.
no subject
Date: 2012-08-28 11:41 am (UTC)no subject
Date: 2012-08-28 11:51 am (UTC)no subject
Date: 2012-08-28 12:48 pm (UTC)no subject
Date: 2012-08-28 04:59 pm (UTC)no subject
Date: 2012-08-28 11:42 am (UTC)Стандартный logging не умеет, но http://packages.python.org/Logbook/ вроде бы умеет
no subject
Date: 2012-08-28 11:42 am (UTC)http://msdn.microsoft.com/en-us/library/hh534540.aspx
no subject
Date: 2012-08-28 11:58 am (UTC)no subject
Date: 2012-08-30 12:34 am (UTC)no subject
Date: 2012-08-28 11:48 am (UTC)если приспичит экономить полпроцента "тормозов", ну сделайте свой препроцессор
no subject
Date: 2012-08-28 11:53 am (UTC)no subject
Date: 2012-08-28 12:04 pm (UTC)if {$debugMode == 1} {puts [info level 0]}
no subject
Date: 2012-08-28 12:13 pm (UTC)var caller = currentThread.Reflection.GetStack().GetItem(1);
log(caller.FunctionName + " " + caller.LineNumber);
no subject
Date: 2012-08-28 12:17 pm (UTC)using System.Diagnostics;
// get call stack
StackTrace stackTrace = new StackTrace();
// get calling method name
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
no subject
Date: 2012-08-28 12:20 pm (UTC)no subject
Date: 2012-08-28 12:20 pm (UTC)no subject
Date: 2012-08-28 12:19 pm (UTC)no subject
Date: 2012-08-28 12:52 pm (UTC)no subject
Date: 2012-08-28 01:05 pm (UTC)no subject
Date: 2012-08-28 12:48 pm (UTC)Но я это использую только в одном месте: специально написанные функции типа warn и assert в модуле диагностики.
no subject
Date: 2012-08-28 01:27 pm (UTC)no subject
Date: 2012-08-28 01:56 pm (UTC)no subject
Date: 2012-08-28 02:48 pm (UTC)no subject
Date: 2012-08-28 03:48 pm (UTC)no subject
Date: 2012-08-29 07:51 am (UTC)no subject
Date: 2012-08-29 04:05 pm (UTC)no subject
Date: 2012-08-30 08:30 am (UTC)no subject
Date: 2012-08-28 03:42 pm (UTC)что в студии, что в gcc
для log4cxx элементарно делается дефайн который сам вставляет имя функции
no subject
Date: 2012-08-28 05:13 pm (UTC)no subject
Date: 2012-08-28 05:16 pm (UTC)no subject
Date: 2012-08-28 06:39 pm (UTC)#define sd_journal_print(priority, ...) sd_journal_print_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _sd_STRINGIFY(__LINE__), __func__, __VA_ARGS__)
А ещё она сама добавляет: PID, UID, GID, CMDLINE, REALTIME_TIMESTAMP, MONOTONIC_TIMESTAMP, HOSTNAME и некоторые другие, менее важные параметры.