Вопрос

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

Конкретно;

  • Где находится файл конфигурации в файле пакета .war?
  • Куда люди входят: в плоский файл с относительным или абсолютным путем или в базу данных?
  • Журналирование Log4J автоматически попадает непосредственно в файл журнала сервера приложений или это нужно настроить?В данном случае я использую Tomcat, но часто использую Jrun.
  • Есть ли еще какие-нибудь проблемы, о которых мне следует знать при ведении журнала веб-приложений?

В настоящее время я использую Log4J, но полагаю, что лучшие практики будут применяться универсально ко всем реализациям журналирования.

РЕДАКТИРОВАТЬ:
Еще одно дополнение к вопросам сверху.

  • Где вы инициируете конфигурацию журнала?

В традиционном приложении я делаю это в точке входа;

DOMConfigurator.configureAndWatch("log4j.xml");

Каким будет эквивалент веб-приложения?

Это было полезно?

Решение

Я помещаю свою конфигурацию в пакет по умолчанию:источник/

и войдите в файлы, используя системное свойство ${catalina.home}:

log4j.appender.???.file=${catalina.home}/logs/system.log

Другие советы

Я бы рекомендовал вам использовать SLF4J.Это простой фасад журналирования, который поддерживает большинство популярных систем журналирования (Лог4дж, Commons-регистрация, API ведения журнала Java и Вход в систему).Используй это, вы сможете заменить свою систему регистрации подчеркиваний на любой другой путем простого обновления CLASSPATH.

Другое преимущество SLF4J являются параметризованные вызовы, что уменьшает некрасивый код ведения журнала.

На самом деле, они рекомендуют использовать SLF4J с Вход в систему. Вход в систему является преемником Лог4J.И разработан он тем же автором.

Где находится файл конфигурации в файле пакета .war?Корень пути к классам.

Куда люди входят: в плоский файл с относительным или абсолютным путем или в базу данных?Зависит от необходимости.Всегда лучше использовать относительные пути.Базы данных хороши, если вы реализуете другое приложение, которое будет получать из него журналы и отправлять их по электронной почте/SMS.

Журналирование Log4J автоматически попадает непосредственно в файл журнала сервера приложений или это нужно настроить?В данном случае я использую Tomcat, но часто использую Jrun.Если вы используете консольное приложение, да, оно будет зарегистрировано в файле журнала контейнера сервлетов.

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

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

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

К сожалению, не существует «официального» способа поиска внешних ресурсов из веб-приложения (поправьте меня, если я ошибаюсь).Самый распространенный способ сделать это, который я видел, — просмотреть каталоги в пути к классам.

Я рекомендую вызывать API журнала (log4j) через slf4j.Даже если вы используете log4j, веб-контейнер или зависимые модули могут использовать другой API журнала, например Java.util.logging или ведение журнала Jakarta commons.Slf4j предоставляет модули моста, которые перенаправляют их в API slf4j.В результате все сообщения журнала в этом случае записываются log4j.

Отличная бумага Как правильно вести журнал приложений есть куча ошибок.

Я считаю, что на другие ваши вопросы ответили другие люди на этой странице.

Я также рекомендую вам использовать SLF4J.

Одна последняя вещь:имея речевые изображения объектов можно сэкономить немного времени.

  • поместите log4j в контейнер (сервер) и создайте правильные приложения для каждого приложения.
  • относительно пути к серверу, но это зависит от ваших потребностей
  • мы используем приложения, которые регистрируются в разных файлах, в зависимости от ваших потребностей, например.один файл для информации/статистики спящего режима, один только для приложения и т. д.
  • не логируйте много, это замедляет работу приложения

Лично я помещаю log4j.properties в каталог WEB-INF и использую сервлет инициализации со следующим кодом:

public class InitServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

private static final String LOG4J_FILE = "WEB-INF/log4j.properties";

public InitServlet() {
    super();
}

@Override
public void init() throws ServletException {
    super.init();
    PropertyConfigurator.configure(getServletContext().getRealPath(LOG4J_FILE));
    LogFactory.getLog(InitServlet.class).info("LOG 4J configured");
}

}

  • Где находится файл конфигурации в файле пакета .war?

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

  • Куда люди входят: в плоский файл с относительным или абсолютным путем или в базу данных?

Обычно я захожу в файловую систему на отдельный раздел (файлы журналов могут расти очень быстро и никогда не должны блокировать приложение или операционную систему, если они становятся слишком большими).Большую часть времени я использую абсолютный путь на основе следующей модели:/var/projects/<PROJECT_NAME>/<PRODUCT>/<CLUSTER_NAME>/logs/<INSTANCE_NAME>.log где <PROJECT_NAME> — имя проекта, <PRODUCT> может быть Apache, Tomcat, Weblogic,..., <CLUSTER_NAME > имя кластера и <INSTANCE_NAME> имя экземпляра внутри кластера.Запись в файловую систему происходит быстрее, чем в базу данных.Недостаток заключается в том, что журналы не централизованы, если вы используете несколько экземпляров и физических машин.Но слияние можно легко выполнить с помощью скрипта.

  • Журналирование Log4J автоматически попадает непосредственно в файл журнала сервера приложений или это нужно настроить?В данном случае я использую Tomcat, но часто использую Jrun.

Журналы сервера приложений — это журналы сервера приложений, а не журналы приложений.Не пишите им, а установите инструмент для регистрации (например,log4j) и писать в журналы приложений (подразумевается выделенный).

  • Есть ли еще какие-нибудь проблемы, о которых мне следует знать при ведении журнала веб-приложений?

Если вы используете log4j, не забудьте использовать isDebugEnabled() перед записью в журнал:

if(logger.isDebugEnabled()) {
  logger.debug("Bla Bla Bla");
}
  • Где находится файл конфигурации в файле пакета .war?

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

  • Куда люди входят: в плоский файл с относительным или абсолютным путем или в базу данных?

Опять же, зависит от настроек сервера приложений.Обычная настройка — это один общий файл журнала для сервера приложений, который меняется ежедневно.Если есть какие-либо потребности, специфичные для приложения, администратор может настроить отдельный файл журнала для приложения (отличающийся именами пакетов/классов).

  • Журналирование Log4J автоматически попадает непосредственно в файл журнала сервера приложений или это нужно настроить?В данном случае я использую Tomcat, но часто использую Jrun.

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

  • Есть ли еще какие-нибудь проблемы, о которых мне следует знать при ведении журнала веб-приложений?Производительность.Ограничьте уровень журнала до минимума (т.е.WARN или ERROR) после запуска.Использоватьif (log.isDebugEnabled()) { log.debug("..."); } и подобные конструкции в вашем коде.

Обратите внимание: если вам просто нужно немного журналировать, стандарт сервлета указывает, что вы можете получить ServletContext и использовать там методы журналирования.Это общий эквивалент сервлета System.out.println.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top