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

Date: 2012-08-28 11:35 am (UTC)
From: [identity profile] redplait.blogspot.com (from livejournal.com)
functions inlining ?

Date: 2012-08-28 11:45 am (UTC)
From: [identity profile] volodymir-k.livejournal.com
какое это имеет отношение к константам времени компиляции? никакого

Date: 2012-08-28 06:15 pm (UTC)
From: [identity profile] redplait.blogspot.nl (from livejournal.com)
а при чем тут константы времени компиляции ? гуглить ключевое слово reflection например

Date: 2012-08-28 11:38 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
/usr/src/contrib/binutils/bfd/bfd-in2.h: (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__), \

Date: 2012-08-28 11:38 am (UTC)
From: [identity profile] justy-tylor.livejournal.com
Бывает __func__, __FUNC__, __FUNCTION__, ...

В зависимости от компилятора.

Date: 2012-08-28 11:39 am (UTC)
From: [identity profile] falcrum.livejournal.com
Уже задавался таким вопросом - было бы неплохо, да...

Date: 2012-08-28 11:40 am (UTC)
From: [identity profile] enternet.livejournal.com
Да не надо это никому. Вот и весь секрет. Кому надо, тот и стек раскрутит и в лог запишет то, что захочет.

Уж на что в дотнете это просто делается, да и то бывает лениво. Последнее время компилирую всё с отладочной информацией, консольный вывод перенаправляю в файл. Вот и лог нахаляву.

Date: 2012-08-28 11:41 am (UTC)
From: [identity profile] potan.livejournal.com
В Erlang и OCaml аналогичные фичи точно есть.

Date: 2012-08-28 11:51 am (UTC)
From: [identity profile] zerthurd.livejournal.com
В Erlang точно нет (http://www.erlang.org/doc/reference_manual/macros.html)

Date: 2012-08-28 12:48 pm (UTC)
From: [identity profile] potan.livejournal.com

-module(f).
-export([start/0]).

start() ->
        io:write([?FILE, ?LINE]).

Date: 2012-08-28 04:59 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
И где там пишется имя функции?

Date: 2012-08-28 11:42 am (UTC)
From: [identity profile] avnik.livejournal.com
В питоне можно так сделать.
Стандартный logging не умеет, но http://packages.python.org/Logbook/ вроде бы умеет

Date: 2012-08-28 11:42 am (UTC)
From: (Anonymous)
опана что я нашел:
http://msdn.microsoft.com/en-us/library/hh534540.aspx

Date: 2012-08-28 11:58 am (UTC)
From: [identity profile] metaclass.livejournal.com
2012 студия. Не прошло и 10 лет.

Date: 2012-08-30 12:34 am (UTC)
From: [identity profile] adontz.livejournal.com
Ну а IReadOnlyCollection только в 4.5 не ту же реакцию вызывает?

Date: 2012-08-28 11:48 am (UTC)
From: [identity profile] volodymir-k.livejournal.com
целую языковую фичу вводить ради одного, неочевидно нужного ли, применения?

если приспичит экономить полпроцента "тормозов", ну сделайте свой препроцессор

Date: 2012-08-28 11:53 am (UTC)
From: [identity profile] plumqqz.livejournal.com
perldoc -f caller

Date: 2012-08-28 12:04 pm (UTC)
From: [identity profile] bambr77.livejournal.com
Это типа так:

if {$debugMode == 1} {puts [info level 0]}
Edited Date: 2012-08-28 12:04 pm (UTC)

Date: 2012-08-28 12:13 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Только это должно быть не в языке, а в средствах интроспекции. Что-то типа
var caller = currentThread.Reflection.GetStack().GetItem(1);
log(caller.FunctionName + " " + caller.LineNumber);

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

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

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

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

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

Date: 2012-08-28 12:19 pm (UTC)
From: [identity profile] metaclass.livejournal.com
В средствах, как минимум в дотнете есть. Подтормаживает.

Date: 2012-08-28 12:52 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
(Thread.currentThread().getStackTrace())[2].getMethodName()

Date: 2012-08-28 01:05 pm (UTC)
From: [identity profile] denisioru.livejournal.com
После обработки сборки обфускатором сиё будет выдавать невразумительный бред. И это другое, это run-time. А речь про compile time.

Date: 2012-08-28 12:48 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Perl caller

Но я это использую только в одном месте: специально написанные функции типа warn и assert в модуле диагностики.

Date: 2012-08-28 01:27 pm (UTC)
From: [identity profile] zelanton.livejournal.com
напиши уже парсер исходников, который будет расставлять соотв. константы.
Edited Date: 2012-08-28 01:42 pm (UTC)

Date: 2012-08-28 01:56 pm (UTC)
From: [identity profile] familom.livejournal.com
http://www.gnu.org/savannah-checkouts/non-gnu/libunwind/man/libunwind%283%29.html

Date: 2012-08-28 02:48 pm (UTC)
From: [identity profile] migmit.livejournal.com
А в чём проблема использовать CPP с другими языками?

Date: 2012-08-28 03:48 pm (UTC)
From: [identity profile] slonopotamus.livejournal.com
В поддержке средой разработки.

Date: 2012-08-29 07:51 am (UTC)
From: [identity profile] migmit.livejournal.com
Не очень понял, какая поддержка требуется.

Date: 2012-08-29 04:05 pm (UTC)
From: [identity profile] slonopotamus.livejournal.com
Да даже банальная подсветка синтаксиса накроется если среда не в курсе макросов.

Date: 2012-08-30 08:30 am (UTC)
From: [identity profile] zamotivator.livejournal.com
Берите emacs, легко дописать такую поддержку.

Date: 2012-08-28 03:42 pm (UTC)
From: [identity profile] vaddimka.livejournal.com
__FUNCTION__ же
что в студии, что в gcc
для log4cxx элементарно делается дефайн который сам вставляет имя функции

Date: 2012-08-28 05:13 pm (UTC)

Date: 2012-08-28 05:16 pm (UTC)
From: [identity profile] cottidianus.livejournal.com
причём __func__ - это не препроцессорная константа

Date: 2012-08-28 06:39 pm (UTC)
From: [identity profile] max_posedon (from livejournal.com)
Фрагмент моей любимой библиотеки для логирования.

#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 и некоторые другие, менее важные параметры.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 21st, 2025 05:23 am
Powered by Dreamwidth Studios