Вход сервера - в базе данных или файле журнала?

Это просто, как работает JavaScript. Вы можете объявить именованную функцию:

function foo(msg){
   alert(msg);
}

И вызвать ее:

foo("Hi!");

Или вы можете объявить анонимную функцию:

var foo = function (msg) {
    alert(msg);
}

И вызвать это :

foo("Hi!");

Или вы просто не можете связать функцию с именем:

(function(msg){
   alert(msg);
 })("Hi!");

Функции также могут возвращать функции:

function make_foo() {
    return function(msg){ alert(msg) };
}

(make_foo())("Hi!");

Это ничего не стоит что любые переменные, определенные с помощью «var» в теле make_foo, будут закрываться каждой функцией, возвращаемой make_foo. Это закрытие, и это означает, что любые изменения, внесенные в значение одной функцией, будут видны другой.

Это позволяет вам инкапсулировать информацию, если вы хотите:

function make_greeter(msg){
    return function() { alert(msg) };
}

var hello = make_greeter("Hello!");

hello();

Просто так работает почти каждый язык программирования, кроме Java.

10
задан Dan Lew 28 June 2009 в 22:23
поделиться

11 ответов

Во-первых, используйте библиотеку журналирования, такую ​​как SLF4J / Logback, которая позволяет вам принимать это решение динамически. Затем вы можете настроить файл конфигурации и направить некоторые или все сообщения журнала в несколько разных пунктов назначения.

Будьте очень осторожны, прежде чем регистрироваться в базе данных приложения, вы можете легко перегрузить его, если регистрируете много информации. и громкость начинает расти. И если ваше приложение работает почти на полную мощность или в режиме сбоя, сообщения журнала могут быть недоступны, и вы будете летать вслепую. Вероятно, единственные сообщения, которые должны поступать в базу данных вашего приложения, - это высокоуровневые прикладные события (тип данных приложения).

Гораздо лучше «регистрировать в файловой системе» (который для большой производственной среды включает ведение журнала на адрес многоадресной рассылки, читаемый избыточными серверами агрегирования журналов).

Файлы журналов можно считывать в специальные аналитические базы данных, где вы можете использовать, например, Hadoop для сопоставления / сокращения анализа данных журнала.

10
ответ дан 3 December 2019 в 22:38
поделиться

Если вы выберете формат файла журнала, который можно анализировать, вы можете log в файл, а затем иметь внешний процесс (возможно, запускаемый cron), который обрабатывает ваши файлы журнала и вставляет детали в вашу базу данных. Это можно организовать в то время, когда нагрузка на ваше приложение и базу данных низкая.

Меня всегда беспокоит, что произойдет, если база данных станет недоступной: помешает ли это вашему приложению работать или ухудшит его каким-либо образом? Регистрация в файловой системе позволяет избежать этой проблемы, но вам все равно придется беспокоиться о заполнении дисков и ротации файлов журнала.

1
ответ дан 3 December 2019 в 22:38
поделиться

Регистрировать в БД, только если она приносит доход.

Например, для одного сайта мы зарегистрировали все рекламные объявления, размещенные на веб-сайте, в базе данных. Это приносило доход. Нет причин разбирать файлы журналов на предмет чего-то столь важного.

Все остальное идет в файловую систему.

Регистрируется в файловой системе для отладки. Это вообще личное дело. Детали реализации. Запрещается разглашать.

Apache записывает в файловую систему огромное количество информации. Не дублируйте это.

Журналы контроля доступа идут в файловую систему. Вы редко захотите смотреть на них подробно.

Действия пользователя, возможно, придется суммировать в базе данных. Это маркетинговая информация и информация об удобстве использования, которую вы захотите изучить, чтобы улучшить свой сайт. Однако подробная информация о деятельности слишком объемна для записи в базу данных.

1
ответ дан 3 December 2019 в 22:38
поделиться

На тот случай, если вы решите настроить стандартный регистратор Python для входа в базу данных, этот рецепт может дать вам преимущество: Вход в учетную запись Jabber .

]
0
ответ дан 3 December 2019 в 22:38
поделиться

Я бы в первую очередь использовал ведение журнала файловой системы, как и большинство других ответов. С помощью пакета протоколирования Python вы можете легко создать обработчик базы данных, адаптировав предложение, сделанное здесь . Вы также можете создать собственный экземпляр фильтра и присоединить его к обработчику базы данных - это позволит вам во время выполнения точно определять, какие события вы фактически регистрируете в базе данных. В соответствии с другими ответами, я бы сказал, что действительно стоит регистрировать некоторые типы событий в базе данных для последующего анализа.

Я согласен с рекомендацией регистрировать в отдельной базе данных (на отдельном сервере), если ваше основное приложение имеет высокую пропускную способность.

0
ответ дан 3 December 2019 в 22:38
поделиться

Тип регистрации зависит от того, что вы собираетесь делать с данными и как вы собираетесь это делать. Ведение журнала в базу данных выгодно, если вы собираетесь создать систему отчетности на основе этой базы данных журнала. Или вы можете регистрировать вещи в определенном формате, который вы можете проанализировать позже, если хотите использовать данные для некоторого анализа. Например, из журнала файлов вы можете анализировать только необходимую информацию и генерировать CSV-файлы по мере необходимости. Если вы планируете использовать регистратор db, как уже предлагалось, разместите его отдельно от db вашего приложения.

Во-вторых, вы можете рассмотреть возможность использования регистратора независимо от вашего основного приложения. Либо создайте поток, который ведет журнал, либо запустите регистратор на определенном порту / сокете и передайте ему сообщения журнала,

0
ответ дан 3 December 2019 в 22:38
поделиться

Мы делаем и то, и другое.

Мы регистрируем оперативную информацию / прогресс / и т.д. в файл журнала. Стандартный файл журнала.

В базе данных мы записываем статусы операций. Например, каждый обработанный элемент, поэтому мы можем делать запросы о пропускной способности / затраченном времени и т. Д. Эти данные особенно полезны при отслеживании тенденций и обнаружении аномалий (система «слишком тихая» и т. Д.), Которые потенциально могут указывать на другие проблемы.

0
ответ дан 3 December 2019 в 22:38
поделиться

Лучше всего подойдет сочетание file.log + db. Войдите в базу данных с информацией, которую вам в конечном итоге может понадобиться проанализировать, например, среднее количество пользователей в день и т. Д. И используйте file.log для хранения некоторой отладочной информации.

2
ответ дан 3 December 2019 в 22:38
поделиться

Мы всегда записывали данные в отдельную базу данных .

Это позволяет нам делать запросы, не затрагивая базу данных приложения. Это также упрощает ситуацию, если мы понимаем, что нам нужно отключить ведение журнала или изменить объем того, что мы регистрируем.

Но большинство современных библиотек регистрации поддерживают встраивание регистрации в ваше приложение и выбор места назначения по конфигурации - файл, база данных, что угодно.

Регистратор дает вам множество способов управления журналом, и хотя в пакете по умолчанию нет регистратора базы данных, написать такой обработчик событий не составит труда.

1
ответ дан 3 December 2019 в 22:38
поделиться

На самом деле кажется важным, чтобы вы могли позже переключаться между ведением журнала DB / File. Ведение журнала базы данных кажется намного медленнее, чем ведение журнала в виде обычного текстового файла, что может стать важным при большом трафике журнала. Я создал библиотеку (которая может работать автономно или как обработчик), когда у меня было такое же требование. Он регистрируется в базе данных и / или файлах и позволяет архивировать важные сообщения (и архив может, например, быть базой данных, в то время как все идет в текстовые файлы). Это может спасти вас от написания кода еще одного с нуля ... См .: Библиотека rrlog

0
ответ дан 3 December 2019 в 22:38
поделиться

Похоже, многие из вас записывают некоторые события в базу данных. Я делаю то же самое, но с небольшой задержкой. Кто-нибудь из вас входит в базу данных через очередь сообщений? Если да, то что вы используете для постановки в очередь и какова ваша архитектура журналирования? Я использую Java / J2EE.

0
ответ дан 3 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: