Господа,
сегодня, после примерно трехлетнего перерыва, я попробовал еще раз применить log4net в своем проекте.
Три года назад я попробовал, у меня не получилось, я плюнул, и написал свой логгер, которвй в 50 строчках делал всё, что мне надо.
Я его даже в DLL не оформлял — прорсто копировал эти 50 строк как статический класс из проекта в проект.
Но я ставноивлся взрослее, и все чаще мой класс заставлял меня делать кучу проверок в коде и всяких неудобных операций, чтобы получить результат.
И вот я оопять попробовал овладеть log4net
И понял 2 вещи:
1) я все таки ни хрена не понимаю. Потому что ну очень грормоздко. Философия log4net хорошо передается фразой из введения в него: "Run the program and… see nothing. Don’t worry, that’s expected."
2) Неужели весь java — style софт такое же унылое г?
Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
Здравствуйте, SteeLHeaD, Вы писали:
SLH>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
просто читаешь ман. нет мана? — исходники. делаешь для себя конфиг. пользуешься.
вообще перед тем как что-то исспользовать надо хорошенько изучить, надо ли оно вообще тебе, какие есть альтернативы, какие могут возникнуть проблемы в будущем.
юзать либу в проекте, не изучив ее — смешно. это все-равно что купить айфон, потому что увидел как ванильнильная фифа в метро делала с айфона селфи, а потом страдать, потому что айфон ничего толком и не умеет, а в апл обратно его уже не вернуть(из проекта либу не выпилить/дописать, — можно, но костылями).
Підтримати Україну у боротьбі з країною-терористом.
Здравствуйте, SteeLHeaD, Вы писали:
SLH>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
Какие 4 страницы? Берете простейший базовый конфиг, пишите две строчки для инициализации и все готово. Нормальный обычной логгер.
Здравствуйте, SteeLHeaD, Вы писали:
SLH>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
Здравствуйте, SteeLHeaD, Вы писали:
SLH>Три года назад я попробовал, у меня не получилось, я плюнул, и написал свой логгер, которвй в 50 строчках делал всё, что мне надо.
+1 к цепочке велосипедастов. У меня, правда, заняло 535, но это со всеми комментами/отступами, зато логгер имеет уровни логгирования(DEBUG/TRACE/etc), асинх, резервный канал лога, вывод в консоль/файл/винлог/БД и всё это на плагинах. Что там понаписали макаки в log4 — ума не приложу, но точно воды на 95%.
SLH>1) я все таки ни хрена не понимаю. Потому что ну очень грормоздко.
Потому что пишут яйцеголовые кодисты-абстракционисты им почему-то кажется, что их мусором будут пользоваться минимум 100 лет и непременно в самых экстремально-извращённых конфигурациях.
SLH>2) Неужели весь java — style софт такое же унылое г?
Не думаю. Но Жабо — многословный, да — сказывается переупрощённая библиотека и "никакой" язык.
Здравствуйте, Mr.Delphist, Вы писали:
SLH>>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
MD>Попробуйте NLog?
Я бы даже сказал, попробуйте Common.Logging. А какой конкретный логер с ним юзать — второй вопрос. Хотя, я тоже за NLog.
Здравствуйте, SteeLHeaD, Вы писали:
SLH>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
совершенно не оправдываю log4net, но философия шариковых не работает с логами:
— "запиши лог!" — куда? на консоль? в файл? в OutputDebugString? в windows event log? в базу данных? послать по сети? что делать, если это winforms, где консоли нет? Если в файл, в какой файл писать, как файлы именовать и ротировать?
Ах, вам все это не нужно и вы не хотите в этом разбираться и нужен "самый простой" сценарий — но у всех они разные, а библиотека одна.
Здравствуйте, SteeLHeaD, Вы писали:
SLH>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
Пользуйтесь NLog. У меня от log4net впечатления странные, когда один и тот же конфиг ведет себя по-разному в разных проектах — это ненормально. Гибкость у него потрясающая, конечно, но NLog тоже умеет очень многое.
Здравствуйте, SteeLHeaD, Вы писали: SLH>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять.
Есть из коробки http://blog.stephencleary.com/2010/12/simple-and-easy-tracing-in-net.html
Здравствуйте, QrystaL, Вы писали:
QL>Здравствуйте, SteeLHeaD, Вы писали: SLH>>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. QL>Есть из коробки http://blog.stephencleary.com/2010/12/simple-and-easy-tracing-in-net.html
Observe the Trace Messages Simple tracing can be observed in one of two ways:
If you run the application in the Visual Studio Debugger, all enabled trace output is written to the Output window.
If you’re running in production (or for some other reason can’t use the debugger), a free Microsoft tool called DebugView may be used to view the traces in real-time (and optionally log them to a file). Tip: uncheck “Options” “Force Carriage Returns” to make the trace output line up correctly.
шел 2016 год. Решения "из коробки" со словами "Simple" в названии требуют "microsoft tool" или visual studio чтобы просто посмотреть логи (и даже это делается не с первой попытки — см. текст про force carriage returns)
Здравствуйте, nigh, Вы писали: N>шел 2016 год. Решения "из коробки" со словами "Simple" в названии требуют "microsoft tool" или visual studio чтобы просто посмотреть логи (и даже это делается не с первой попытки — см. текст про force carriage returns)
Че-то вы не дочитали, сразу с шашкой наголо кинулись критиковать
Процитированный отрывок это дополнительный функционал (например, в студии в Output всё дублируется).
Буквально следующий же абзац
You can add “trace listeners”. The simple tracing above just uses the Default trace listener. .NET also includes listeners for logging to the Event Log, a text file, an XML file, or the Console.
Здравствуйте, QrystaL, Вы писали:
QL>Здравствуйте, nigh, Вы писали: N>>шел 2016 год. Решения "из коробки" со словами "Simple" в названии требуют "microsoft tool" или visual studio чтобы просто посмотреть логи (и даже это делается не с первой попытки — см. текст про force carriage returns) QL>Че-то вы не дочитали, сразу с шашкой наголо кинулись критиковать QL>Процитированный отрывок это дополнительный функционал (например, в студии в Output всё дублируется).
QL>Буквально следующий же абзац QL>
QL>You can add “trace listeners”. The simple tracing above just uses the Default trace listener. .NET also includes listeners for logging to the Event Log, a text file, an XML file, or the Console.
я дочитал. Процитированный отрывок — это раздел "Observe the Trace Messages", а ваше — это "More power!"
Я даже это убожество (.NET Trace listeners) на практике использовал. Рекомендовать такое можно только в двух случаях: вы никогда сами этим не пользовались или вы рекомендуете кому-то кого сильно не любите.
Например, ни один из стандартных Trace listener, который пишет в файлы, не умеет их ротировать. Совсем. Указываете одно имя файла и надеетесь на лучшее
Приходится импортировтаь классы из Microsoft.VisualBasic.Logging
Здравствуйте, nigh, Вы писали: N>Например, ни один из стандартных Trace listener, который пишет в файлы, не умеет их ротировать. Совсем.
Вы уж разберитесь — то ли вам надо
скзаать "запиши лог!" — и он запишет лог
то ли продвинутый функционал
Какая постановка вопроса — такой и совет.
Здравствуйте, QrystaL, Вы писали:
QL>Здравствуйте, nigh, Вы писали: N>>Например, ни один из стандартных Trace listener, который пишет в файлы, не умеет их ротировать. Совсем. QL>Вы уж разберитесь — то ли вам надо QL>
QL>скзаать "запиши лог!" — и он запишет лог
QL>то ли продвинутый функционал
так прикол в том, что "запиши лог!" в случае с .NET trace listener его пишет не в файл, а в Debug Output, где его посмотреть можно только в студии или через DebugView.
Чтобы пистаь в файл, надо еще какой-то XML файл редактировать и что-то там указывать. И это ничем от log4net с его конфигурацией Appenderов не отличается.
Здравствуйте, nigh, Вы писали:
N>совершенно не оправдываю log4net, но философия шариковых не работает с логами
Да всё оно работает. Практически во всех логгерах основной сценарий: пишем логирование в коде, затем динамически подрубаем листенеры к известным источникам. Листенеров нет — нагрузка нулевая.
Дальше все различия из серии про вкус фломастеров.
Здравствуйте, nigh, Вы писали: N>Чтобы пистаь в файл, надо еще какой-то XML файл редактировать и что-то там указывать. И это ничем от log4net с его конфигурацией Appenderов не отличается.
Чтобы писать в файл, надо как минимум указать путь к нему. Это делается одной строчкой прямо в коде. ХМЛ файл вообще не обязателен.
var traceSource = new TraceSource("File");
traceSource.Listeners.Add(new TextWriterTraceListener("d:/log.txt"));
Здравствуйте, nigh, Вы писали:
N>Ах, вам все это не нужно и вы не хотите в этом разбираться и нужен "самый простой" сценарий — но у всех они разные, а библиотека одна.
Поэтому в таких случаях библиотека должна позволять легко подключать готовые сценарии и сложно формировать собственные. Вот посмотри на WCF — по сложности и количеству функционала все эти логгеры даже рядом не валялись, а запустить можно всего несколькими строками кода. А в log4net фигвам — нужно минимум атрибут на сборку навесить и влепить кусок кода в конфиг.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, nigh, Вы писали:
N>>Ах, вам все это не нужно и вы не хотите в этом разбираться и нужен "самый простой" сценарий — но у всех они разные, а библиотека одна.
AVK>Поэтому в таких случаях библиотека должна позволять легко подключать готовые сценарии и сложно формировать собственные.
log4net вроде прекрасно с этим справляется, только для ТС это слишком сложно.
>Вот посмотри на WCF — по сложности и количеству функционала все эти логгеры даже рядом не валялись, а запустить можно всего несколькими строками кода.
Ага, и еще парой мегабайт XMLя (шучу, шучу)
по-моему, что WCF, что log4net одинаковы по количеству overengineering для простых сценариев.
>А в log4net фигвам — нужно минимум атрибут на сборку навесить и влепить кусок кода в конфиг.
аттрибует на сборку вешать наобязательно — нужен или аттрибут или вызов log4net.Config.XmlConfigurator.Configure()
это ничем от "нескольких строчек" в WCF не отличается
Здравствуйте, QrystaL, Вы писали:
QL>Здравствуйте, nigh, Вы писали: N>>Чтобы пистаь в файл, надо еще какой-то XML файл редактировать и что-то там указывать. И это ничем от log4net с его конфигурацией Appenderов не отличается. QL>Чтобы писать в файл, надо как минимум указать путь к нему. Это делается одной строчкой прямо в коде. ХМЛ файл вообще не обязателен. QL>
QL>var traceSource = new TraceSource("File");
QL>traceSource.Listeners.Add(new TextWriterTraceListener("d:/log.txt"));
QL>
так а я о чем? в случае с log4net это абсолютно то же самое.
Здравствуйте, nigh, Вы писали:
N>log4net вроде прекрасно с этим справляется, только для ТС это слишком сложно.
Плохо он справляется, нельзя дефолтный сценарий подключить одной строчкой кода.
>>Вот посмотри на WCF — по сложности и количеству функционала все эти логгеры даже рядом не валялись, а запустить можно всего несколькими строками кода. N>Ага, и еще парой мегабайт XMLя (шучу, шучу)
XML не обязателен, что характерно.
N>по-моему, что WCF, что log4net одинаковы по количеству overengineering для простых сценариев.
Это по твоему. А на практике, к примеру, можно так:
public static WebChannelFactory<IRsdnIndexService> CreateFactory()
{
return new WebChannelFactory<IRsdnIndexService>(
new WebHttpBinding(),
new Uri(ConfigManager.GetString("IndexServerUri")));
}
...
using (var factory = IndexServiceHelper.CreateFactory())
using (var svc = factory.CreateChannel())
svc.Search(...);
И никаких конфигов.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, nigh, Вы писали:
N>>log4net вроде прекрасно с этим справляется, только для ТС это слишком сложно.
AVK>Плохо он справляется, нельзя дефолтный сценарий подключить одной строчкой кода.
что такое "дефолтный сценарий"? Я уже сказал — они у всех разные. Одна строчка там или три чтобы подключить логгирование в файл роли не играет.
>>>Вот посмотри на WCF — по сложности и количеству функционала все эти логгеры даже рядом не валялись, а запустить можно всего несколькими строками кода. N>>Ага, и еще парой мегабайт XMLя (шучу, шучу)
AVK>XML не обязателен, что характерно.
в log4net XML тоже не обязателен.
N>>по-моему, что WCF, что log4net одинаковы по количеству overengineering для простых сценариев.
AVK>Это по твоему. А на практике, к примеру, можно так: AVK>
AVK>public static WebChannelFactory<IRsdnIndexService> CreateFactory()
AVK>{
AVK> return new WebChannelFactory<IRsdnIndexService>(
AVK> new WebHttpBinding(),
AVK> new Uri(ConfigManager.GetString("IndexServerUri")));
AVK>}
AVK>...
AVK>using (var factory = IndexServiceHelper.CreateFactory())
AVK>using (var svc = factory.CreateChannel())
AVK> svc.Search(...);
AVK>
AVK>И никаких конфигов.
я смотрю "одна строчка кода" у вас как-то распухла.
Здравствуйте, nigh, Вы писали:
AVK>>Плохо он справляется, нельзя дефолтный сценарий подключить одной строчкой кода. N>что такое "дефолтный сценарий"? Я уже сказал — они у всех разные.
На старте у всех сценарий один — вывод в консоль и опциональный вывод в файл.
AVK>>XML не обязателен, что характерно. N>в log4net XML тоже не обязателен.
Не заметил.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, nigh, Вы писали:
AVK>>>Плохо он справляется, нельзя дефолтный сценарий подключить одной строчкой кода. N>>что такое "дефолтный сценарий"? Я уже сказал — они у всех разные.
AVK>На старте у всех сценарий один — вывод в консоль и опциональный вывод в файл.
у winforms приложений тоже?
AVK>>>XML не обязателен, что характерно. N>>в log4net XML тоже не обязателен. AVK>Не заметил.
ну почитайте документацию. Все конфигурирование можно делать из кода (также как и в WCF кстати)
Здравствуйте, nigh, Вы писали:
AVK>>На старте у всех сценарий один — вывод в консоль и опциональный вывод в файл. N>у winforms приложений тоже?
Да. Это если вообще возникает потребность в логгинге, что в таких приложениях бывает нечасто.
AVK>>>>XML не обязателен, что характерно. N>>>в log4net XML тоже не обязателен. AVK>>Не заметил. N>ну почитайте документацию. Все конфигурирование можно делать из кода (также как и в WCF кстати)
Читал. А теперь, раз уж ты специалист, приведи минимальный объем кода, чтобы просто выводить лог в консоль и ничего более.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, nigh, Вы писали:
AVK>>>На старте у всех сценарий один — вывод в консоль и опциональный вывод в файл. N>>у winforms приложений тоже? AVK>Да. Это если вообще возникает потребность в логгинге, что в таких приложениях бывает нечасто.
"Ненужен (с)"? понимаю В winforms (равно как и в ASP.NET приложениях) консоли вообще нет, если что Так что вывод в файл там перестает быть опциональным.
AVK>>>>>XML не обязателен, что характерно. N>>>>в log4net XML тоже не обязателен. AVK>>>Не заметил. N>>ну почитайте документацию. Все конфигурирование можно делать из кода (также как и в WCF кстати) AVK>Читал. А теперь, раз уж ты специалист, приведи минимальный объем кода, чтобы просто выводить лог в консоль и ничего более.
var lh = (Hierarchy)LogManager.GetRepository();
lh.Root.AddAppender(new ConsoleAppender());
lh.Configured = true;
Здравствуйте, AndrewVK, Вы писали:
AVK>Читал. А теперь, раз уж ты специалист, приведи минимальный объем кода, чтобы просто выводить лог в консоль и ничего более.
// Конфигурация 1 строчка
log4net.Config.BasicConfigurator.Configure(new ConsoleAppender { Layout = new SimpleLayout() });
// Можно использовать
ILog log = LogManager.GetLogger("testLogger");
log.Warn("test");
Здравствуйте, AndrewVK, Вы писали:
AVK>Поэтому в таких случаях библиотека должна позволять легко подключать готовые сценарии и сложно формировать собственные.
С log4net достаточно один раз разабраться и на всю жизнь. Может следует расширить CodeJam проектами типа CodeJam.Log?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, nigh, Вы писали:
AVK>>Да. Это если вообще возникает потребность в логгинге, что в таких приложениях бывает нечасто. N>"Ненужен (с)"? понимаю В winforms (равно как и в ASP.NET приложениях) консоли вообще нет, если что
Определить отсутствие консоли у процесса — не рокетсайнс. Создать набор стандартных юзкейсов для для разных типов приложений — тоже.
AVK>>Читал. А теперь, раз уж ты специалист, приведи минимальный объем кода, чтобы просто выводить лог в консоль и ничего более.
N>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, nigh, Вы писали:
AVK>>>Да. Это если вообще возникает потребность в логгинге, что в таких приложениях бывает нечасто. N>>"Ненужен (с)"? понимаю В winforms (равно как и в ASP.NET приложениях) консоли вообще нет, если что AVK>Определить отсутствие консоли у процесса — не рокетсайнс. Создать набор стандартных юзкейсов для для разных типов приложений — тоже.
Ну то есть сначала заявляем что дефолтный сценарий — консоль, потом, что в Winforms лог не нужен, а теперь вот дошли наконец до мысли, что дефолтные сценарии у всех разные (о чем вам в самом начале сказали). Еще немного — и осознаете, что "создать набор стандартных юзкейзов для разных типов приложений" эквивалентно наличию примеров использования и one-linerов вроде тех, что вам уже привели.
Врубаешься? Вот оно, просветление-то.
Что, усекли, ну то-то — вижу по глазам
(c)
AVK>А что мешало сделать просто:
Это вам в соседнюю ветку к Shmj. Обсуждать неочевидность BasicConfiguratorа и отсутствие в log4net кнопки "сделать чтобы сразу работало искаропки и понравилось AndrewVK".
Здравствуйте, AndrewVK, Вы писали:
IT>> Может следует расширить CodeJam проектами типа CodeJam.Log? AVK>Этих логов уже понаплодили ... стоит ли делать еще один?
Я про рапер над log4net, который можно будет легко поставить и легко использовать.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, nigh, Вы писали:
AVK>>Определить отсутствие консоли у процесса — не рокетсайнс. Создать набор стандартных юзкейсов для для разных типов приложений — тоже. N>Ну то есть сначала заявляем что дефолтный сценарий — консоль, потом, что в Winforms лог не нужен, а теперь вот дошли наконец до мысли, что дефолтные сценарии у всех разные
Тебе поспорить хочется, что ты постоянно передергиваешь? Да, дефолтный сценарий консоль, потому что логгинг чаще всего требуется в консольном софте. Следующий этап — готовые сценарии. Наконец уровень ниже — полная конфигурация.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
IT>>Я про рапер над log4net, который можно будет легко поставить и легко использовать. AVK>Это зависимость. А делать отдельный пакет из-за одного раппера ...
Я про отдельный пакет. Если идея пойдёт в массы, то захочется раперов для ASP.NET, WPF и т.п.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, nigh, Вы писали:
AVK>>>Определить отсутствие консоли у процесса — не рокетсайнс. Создать набор стандартных юзкейсов для для разных типов приложений — тоже. N>>Ну то есть сначала заявляем что дефолтный сценарий — консоль, потом, что в Winforms лог не нужен, а теперь вот дошли наконец до мысли, что дефолтные сценарии у всех разные
AVK>Тебе поспорить хочется, что ты постоянно передергиваешь? Да, дефолтный сценарий консоль, потому что логгинг чаще всего требуется в консольном софте.
На основании чего сделано это громкое заявление? На основании вашего личного опыта использования логгинга, ограниченного разработкой консольного софта?
Здравствуйте, nigh, Вы писали:
AVK>>Тебе поспорить хочется, что ты постоянно передергиваешь? Да, дефолтный сценарий консоль, потому что логгинг чаще всего требуется в консольном софте. N>На основании чего сделано это громкое заявление? На основании вашего личного опыта использования логгинга, ограниченного разработкой консольного софта?
Ясно, таки поспорить.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Для веба отдельный пакет надо. А вот для log4net — сильно не уверен.
Это вопрос субъетивный. Ты похоже с log4net дальше чем попыток познакомится не заходил. Я тоже делал несколько подходов к снаряду, пока не разобрался. Зато теперь для меня это вопрос копипасты, ну или отдельного пакета.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, nigh, Вы писали:
N>>?
IT>Нет, конечно. Речь о полноценном решении со всеми плюшками, удобным API и шаблонами конфига. Можно даже датабазу через linq2db прикрутить.
Т.е. сделать еще один уровень абстракции над абстракциями log4net? Если да, то зачем?
И т.п. Т.е. речь идёт о вменяемом API, которого так не хватает log4net. Плюс вспомогательные вещи по инициализации и настройке. Пару классов для реализации push/pop логгеров, отложенного логирования, асинхронные методы, экстеншены для тех же исключений, чтобы можно было писать exception.Log() и т.п.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, QrystaL, Вы писали:
N>>шел 2016 год. Решения "из коробки" со словами "Simple" в названии требуют "microsoft tool" или visual studio чтобы просто посмотреть логи (и даже это делается не с первой попытки — см. текст про force carriage returns) QL>Че-то вы не дочитали, сразу с шашкой наголо кинулись критиковать QL>Процитированный отрывок это дополнительный функционал (например, в студии в Output всё дублируется).
QL>Буквально следующий же абзац
QL>You can add “trace listeners”. The simple tracing above just uses the Default trace listener. .NET also includes listeners for logging to the Event Log, a text file, an XML file, or the Console.
А вы моете не абзац процитировать, а набросать минимальный код, который выведет TraceInformation("Fff") в текстовый файл? И не рядом с приложением, куда, как правило, нельзя писать кому попало (в Program Files же оно), а в папку приложения под профилем пользователя?
Здравствуйте, AndrewVK, Вы писали:
AVK>>>Определить отсутствие консоли у процесса — не рокетсайнс. Создать набор стандартных юзкейсов для для разных типов приложений — тоже. N>>Ну то есть сначала заявляем что дефолтный сценарий — консоль, потом, что в Winforms лог не нужен, а теперь вот дошли наконец до мысли, что дефолтные сценарии у всех разные
AVK>Тебе поспорить хочется, что ты постоянно передергиваешь? Да, дефолтный сценарий консоль, потому что логгинг чаще всего требуется в консольном софте. Следующий этап — готовые сценарии. Наконец уровень ниже — полная конфигурация.
Кажется, поспорить — это вам. Ваш оппонент говорит о том, что даже ваши предложения не подходят под требования топикстартера:
Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог.
Не о том, что они не подходящи или сложны вообще, а о том, что не удовлетворяют требованиям топикстартера У вас же помимо как "сделать логгер" надо его ещё и настроить соответствующим образом, а уж если надо настроивать, то одним каким-то вызовом это делать или в конфиге что прикрутить уже не так важно. Если мы всё ещё решаем проблему топикстартера, как ваш оппонент, а не обсуждаем размахиваем шашкой за что-то ещё другое.
Здравствуйте, IT, Вы писали:
IT>Я про рапер над log4net, который можно будет легко поставить и легко использовать.
Нафиг-нафиг. Log4Net — эт привет из мира явы, с оверинженерингом во все поля, техдолгом срезу по подключении и исключительно текстовым ( ) форматом вывода.
С учётом ETW / sem logging в стиле
Здравствуйте, Sinix, Вы писали:
S>Нафиг-нафиг. Log4Net — эт привет из мира явы, с оверинженерингом во все поля, техдолгом срезу по подключении и исключительно текстовым ( ) форматом вывода.
Но это была не реклама логфонета, а предложение полезняшки для облегчения работы логфонетом, раз уж уже и так пришлось.
Философия кодджема как раз в том и состоит чтобы облегчать жизнь программисту, зачем зарубать хорошие намерения в самом начале?
Здравствуйте, IT, Вы писали:
IT>Это вопрос субъетивный. Ты похоже с log4net дальше чем попыток познакомится не заходил. Я тоже делал несколько подходов к снаряду, пока не разобрался. Зато теперь для меня это вопрос копипасты, ну или отдельного пакета.
И я времени на разбирательство потратил много, быстрее бы написал свое урезнанное решение, заточенное под мои нужды. Пусть и не такое гибкое.
Но тут проблема в том что log4net является своего рода стандартом. Знать обязан.
Здравствуйте, Venom, Вы писали:
V>Философия кодджема как раз в том и состоит чтобы облегчать жизнь программисту, зачем зарубать хорошие намерения в самом начале?
Ну вот по-моему лучший способ облегчить — не использовать log4net вообще.
Тем более что есть common-logging. Точно ещё один нужен?
Здравствуйте, AndrewVK, Вы писали:
S>>Но тут проблема в том что log4net является своего рода стандартом. Знать обязан. AVK>Не является.
А вы откройте поиск по NuGet-пакетам и введите "log". Увидите что log4net находится вверху списка с огромным отрывом от остальных. Почти 4 млн. скачиваний пакета.
4 млн. -- это дофига вообще то для библиотеки.
Получается что с большой вероятностью вы будете работать с проектом, в котором уже используется log4net. И если сходу вы будете уговаривать от него отказаться -- на вас будут косо смотреть.
Понимаю что не нравится -- мне тоже не нравится. Но есть вещи объективные. JavaScript тоже никому не нравится, но то что это самый популярный язык мира -- неоспоримо.
Здравствуйте, Shmj, Вы писали:
S>А вы откройте поиск по NuGet-пакетам и введите "log". Увидите что log4net находится вверху списка с огромным отрывом от остальных. Почти 4 млн. скачиваний пакета.
Ввел, не увидел.
S>4 млн. -- это дофига вообще то для библиотеки.
Дофига. Но это не делает ее стандартом.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, Shmj, Вы писали:
S>Но тут проблема в том что log4net является своего рода стандартом. Знать обязан.
Это ни в одном глазу не стандарт, а нормальная (с точки зрения ява программистов "конфиг туда, конфиг сюда") библиотека логгирования. Пользуюсь уже много лет и особых нареканий не вызывает. Альтернативы есть, и не мало.
Нет, я имел в виду типизированный лог. От типизированного API для каждого из сообщений и до записи произвольных данных.
С поддержкой Rx и анализа сообщений в прямом эфире, в том числе out of process.
В общем см содержимое вот этого пакета — это если нужен полный хардкор.
Если попроще в использовании — см SLAB. Вот вывод на консоль в произвольном формате:
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Sharov, Вы писали:
S>>>и исключительно текстовым ( ) форматом вывода. S>>Если я правильно понял, что имелось в виду под текстовым форматом, то вот --http://stackoverflow.com/questions/1147103/log4net-xml-output
S>Нет, я имел в виду типизированный лог. От типизированного API для каждого из сообщений и до записи произвольных данных.
Понятно, есть такая штука -- http://serilog.net/
Я, правда, не использовал пока и не планирую.
Здравствуйте, AndrewVK, Вы писали:
AVK>Дофига. Но это не делает ее стандартом.
"Своего рода" стандартом. Когда все знают и все используют (под все имею в виду большинство, т.к. это самая популярная библиотека для логирования) -- то в некотором роде это уже негласный стандарт.
Здравствуйте, Sharov, Вы писали:
S>Понятно, есть такая штука -- http://serilog.net/
Ну, это всё равно что лопатка против карьерного эскаватора, не катит от слова вообще.
Не забываем про главную фишку ETW — офигенную пропускную способность.
Одна только рекомендация "если событие бросается с меньшей частотой, чем 100 раз в секунду — не заморачивайтесь" чего стоит
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, nigh, Вы писали:
N>>Т.е. сделать еще один уровень абстракции над абстракциями log4net? Если да, то зачем?
IT>Не абстракцию, а рапер. Зачем? Для удобства использования. Например, вместо:
IT>
Господи, ужас какой. Кто ж вас заставляет так делать?
гораздо удобнее пользоваться оригинальным API:
public class MyClass
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
...
public void MyMethod1()
{
log.Info("Info logging", ...);
}
...
public void MyMethod2()
{
log.Notice("Notice logging", ...);
}
}
Если вас смущает "private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);" — то оно добавляется либо одно на класс, либо одно на все приложение (если вам не хочется иметь возможность включать/выключать лог от каждого класса индивидуально и/или видеть правильное имя класса в логах бесплатно)
IT> Т.е. речь идёт о вменяемом API, которого так не хватает log4net.
Может быть стоит просто поближе ознакомиться с lognet? А если там чего-то реально нет, контрибьютить туда?
edit: А, понял, дело исключительно в том, что "Notice" почему-то нет в интерфейсу log — так может лучше его туда законтрибьютить?
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, nigh, Вы писали:
N>>
N>> log.Notice("Notice logging", ...);
N>>
N>>Может быть стоит просто поближе ознакомиться с lognet?
IT>Блин, ещё один умник. Ты свой код компилировал? Видел там где-нибудь Notice?
я отредактировал свое оригинальное сообщение — вопрос — зачем писать wrapperы, почему не законтрибьютить код в log4net? Заодно узнаете, почему метода там сейчас нет
Здравствуйте, nigh, Вы писали:
N>я отредактировал свое оригинальное сообщение — вопрос — зачем писать wrapperы, почему не законтрибьютить код в log4net? Заодно узнаете, почему метода там сейчас нет
Его там нет, потому что таких методов там нужно на десяток тысяч строк вместо с коментариями. Народу видимо лень, а до творческого использования T4 цивилизация ещё видимо не доросла.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, nigh, Вы писали:
N>>я отредактировал свое оригинальное сообщение — вопрос — зачем писать wrapperы, почему не законтрибьютить код в log4net? Заодно узнаете, почему метода там сейчас нет
IT>Его там нет, потому что таких методов там нужно на десяток тысяч строк вместо с коментариями. Народу видимо лень, а до творческого использования T4 цивилизация ещё видимо не доросла.
по-моему, добавление недостающих методов логгинга тривиально делается через extension methods. Зачем там городить T4 — непонятно.
static public void Notice( this ILog log, object message )
{
log.Logger.Log( null, log4net.Core.Level.Notice, message, null);
}
Здравствуйте, Shmj, Вы писали:
S>Что сверх того -- то от лукавого, как говориться. log4net позиционируется как библиотека для простого настраиваемого логирования.
Для чего угодно, только не для простого.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, IT, Вы писали:
S>>Тем более что есть common-logging. Точно ещё один нужен?
IT>Чем он лучше log4net?
Тем, что это единый интерфейс к разным логерам. На выходе может быть хоть log4net, хоть NLog, хоть черт лысый (только адаптер придется написать).
Я лично log4net выкинул нафиг лет 6 назад из-за его глючности. И никакого желания его пробовать еще раз не имею.
Здравствуйте, nigh, Вы писали:
N>по-моему, добавление недостающих методов логгинга тривиально делается через extension methods. Зачем там городить T4 — непонятно.
Можно. Сколько их нужно? Давим сюда ещё оверлоады с иключениями, форматированием, асинхронностью и т.п. Это десятки методов.
N>повторяю вопрос — что мешает недостающие методы законтрибьютить в log4net?
Щас я всё брошу...
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, nigh, Вы писали:
N>шел 2016 год. Решения "из коробки" со словами "Simple" в названии требуют "microsoft tool" или visual studio чтобы просто посмотреть логи (и даже это делается не с первой попытки — см. текст про force carriage returns)
Эта чрезвычайно мощная штука позволяет хоть из драйверов посылать отладочные сообщения. Но вообще, это не для логгирования, а для отладки.
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, nigh, Вы писали:
N>>шел 2016 год. Решения "из коробки" со словами "Simple" в названии требуют "microsoft tool" или visual studio чтобы просто посмотреть логи (и даже это делается не с первой попытки — см. текст про force carriage returns)
С>Эта чрезвычайно мощная штука позволяет хоть из драйверов посылать отладочные сообщения. Но вообще, это не для логгирования, а для отладки.
Драйверы на сишарпе? Да, конечно
"Чрезвычайно мощная штука" — это ETW. Она к рекомендованому донетовскому поделию имеет мало отношения.
Думаю, что этот баг так и будет там висеть. Посмотрел на код log4net, они все эти оверлоады сделали частью интерфейса ILog. Т.е. надо либо ломать интерфейс, либо делать Extensions. Но судя по дремучести их кода (поддержка только 2008-2012 студий), не исключено, что они всё ещё поддерживают ту версию шарпа, в котором нет расширений. В общем, куда ни плюнь, а делать надо (если надо) внешний расширитель.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, nigh, Вы писали:
N>>повторяю вопрос — что мешает недостающие методы законтрибьютить в log4net? Тем более что Active баг висит N>>https://issues.apache.org/jira/browse/LOG4NET-281
IT>Думаю, что этот баг так и будет там висеть. Посмотрел на код log4net, они все эти оверлоады сделали частью интерфейса ILog. Т.е. надо либо ломать интерфейс, либо делать Extensions. Но судя по дремучести их кода (поддержка только 2008-2012 студий), не исключено, что они всё ещё поддерживают ту версию шарпа, в котором нет расширений. В общем, куда ни плюнь, а делать надо (если надо) внешний расширитель.
собственно, в комментариях там написано, что нужно сделать и как сделать для этого поддержку в .NET 2.0 без всяких "внешних расширителей" — просто это еще никто не сделал.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, AndrewVK, Вы писали:
AVK>>Для веба отдельный пакет надо. А вот для log4net — сильно не уверен.
IT>Это вопрос субъетивный. Ты похоже с log4net дальше чем попыток познакомится не заходил. Я тоже делал несколько подходов к снаряду, пока не разобрался. Зато теперь для меня это вопрос копипасты, ну или отдельного пакета.
Наверняка субьективный. Например у нас ребята больше уважают NLog, вторая команда Serilog — кстати конфигурится на ура Fluent API. Serilog для ELK стека просто песня.
Log.Logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.WriteTo.RollingFile(@"C:\Log-{Date}.txt")
.CreateLogger();
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Sharov, Вы писали:
S>>>и исключительно текстовым ( ) форматом вывода. S>>Если я правильно понял, что имелось в виду под текстовым форматом, то вот --http://stackoverflow.com/questions/1147103/log4net-xml-output
Начал читать про semantic logging block, как то мимо меня прошло. Пока все выглядит оченно круто. Посмотрим как будет на практике, надо побольше почитать и поиграться. Если все без особых хлопот, то log4net на помоечку. И вообще надо etw поизучать.
Здравствуйте, Sharov, Вы писали:
S>Если все без особых хлопот, то log4net на помоечку. И вообще надо etw поизучать.
Для собственно передачи данных в ETW достаточно штатного EventSource.
Semlogging нужен для обработки лога — скидывания в текст/базу/ещё куда. И может быть запущен как отдельный процесс.
S> И вообще надо etw поизучать.
Вот тут засада — документации особой нет, только проекты с примерами для SAB и для Microsoft.Diagnostics.Tracing.TraceEvent. Зато довольно детальные и с кучей комментов
Здравствуйте, SteeLHeaD, Вы писали:
SLH>Почему нельзя сделать логгер, которому можно просто скзаать "запиши лог!" — и он запишет лог. И этим можно пользоваться до тех пор, пока не возникнет желания что нить поменять. А вот уже тогда лезть в настройки. А не так, что сначала нужно 4 страницы конфигов, в которых ты не понимаешь, зачем они нужны.
Патаму шо, как только вылазишь из песочницы, так сразу начинают появляться вопросы: а куда записать лог? А насколько подробный лог нужен? А что делать если записать не получается? А что делать если внезапно перфоманс начинает проседать из-за логирования? А как правильно написать ексепшн? А иннер екеспшн? И тд и тп. Собственно говоря в 4 страничном конфиге на эти все вопросы и отвечаешь, сообразно нуждам твоего приложения. Хорошие новости от кэпа: для старта почти всегда достаточно дефолтных значений с минимальными изменениями, а потом постепенно докручиваешь.