4.7. Логирование
Для ведения логов в платформе используется фреймворк Logback.
|
Руководство Logging in CUBA Applications показывает, как ведение логов интегрируется, настраивается и просматривается в виде части самого приложения или с помощью внешних инструментов. |
Для вывода в лог используйте SLF4J API, получая логгер по имени текущего класса. Пример создания логгера и вывода в него:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Foo {
// create logger
private static Logger log = LoggerFactory.getLogger(Foo.class);
private void someMethod() {
// output message with DEBUG level
log.debug("invoked someMethod");
}
}
- Конфигурация логирования
-
Конфигурация логирования задается в файле
logback.xml.-
На этапе разработки, данный файл можно найти в каталоге
deploy/app_homeпроекта после выполнения быстрого развертывания. Файлы логов создаются в каталогеdeploy/app_home/logs.Имейте в виду, что каталог
deployне внесен в Git, и может быть удален и пересоздан в любой момент, поэтому изменения, внесенные в файлы этого каталога могут быть легко потеряны.Если вы хотите внести постоянные изменения в конфигурацию логирования, используемую при разработке, создайте файл
etc/logback.xml(его можно скопировать из исходногоdeploy/app_home/logback.xmlи изменить как требуется). Этот файл будет копироваться вdeploy/app_homeкаждый раз, когда вы запускаете приложение в Studio или выполняете задачу Gradledeploy:my_project/ deploy/ app_home/ logback.xml ... etc/ logback.xml - if exists, will be automatically copied to deploy/app_home -
При создании архивов WAR и UberJAR,
logback.xmlможно предоставить с помощью указания относительного пути к нужному файлу в параметреlogbackConfigurationFileзадач buildWar и buildUberJar. Если данный параметр не указан, в WAR/UberJar будет встроена конфигурация логирования по умолчанию.Имейте в виду, что файл
etc/logback.xml, созданный вами для конфигурации этапа разработки, не будет использован по умолчанию для WAR/UberJar, т.е. необходимо указать файл явно:my_project/ etc/ logback.xml war-logback.xmlbuild.gradletask buildWar(type: CubaWarBuilding) { // ... logbackConfigurationFile = 'etc/war-logback.xml' } -
На этапе эксплуатации встроенную в WAR/UberJAR конфигурацию логирования можно переопределить, положив файл
logback.xmlс нужными настройками в домашний каталог приложения.Файл
logback.xmlв домашнем каталоге приложения будет распознан только если системное свойствоapp.homeуказано в командной строке. Это не сработает, если домашний каталог будет установлен автоматически вtomcat/work/app_homeили~/.app_home.
-
- logback.xml structure
-
Рассмотрим структуру файла
logback.xml.-
Элементы
appenderзадают "устройства вывода" логов. Основными аппендерами являютсяFILEиCONSOLE. В параметреlevelэлементаfilterможно задать порог уровня сообщения. По умолчанию порог для файла -DEBUG, для консоли -INFO. Это означает, что в файл выводятся сообщения с уровнямиERROR,WARN,INFO,DEBUG, а в консоль - с уровнямиERROR,WARNиINFO.Для файлового аппендера в элементе
fileзадается путь к файлу лога. -
Элементы
loggerзадают параметры логгеров, через которые производится посылка сообщений из кода программы. Имена логгеров иерархические, то есть например настройки для логгераcom.company.sampleвлияют на логгерыcom.company.sample.core.CustomerServiceBean,com.company.sample.web.CustomerBrowse, если для них явно не заданы собственные настройки.Минимальный уровень указывается в атрибуте
level. Например, если для логгера задан приоритетINFO, то сообщения с уровнямиDEBUGиTRACEвыводиться не будут. Следует иметь в виду, что на вывод сообщения также влияет порог уровня, заданный в аппендере.
Оперативно изменять уровни для логгеров и пороги аппендеров для работающего сервера можно с помощью экрана Administration > Server Log, доступного в веб-клиенте. Сделанные настройки логирования действуют только в текущем сеансе работы сервера и в файл не сохраняются. Этот экран позволяет также просматривать и загружать файлы логов из каталога журналов сервера.
-
- Log message format
-
Платформа автоматически добавляет к сообщениям, выводимым в лог, следующую информацию:
-
приложение - имя веб приложения, развернутого в Tomcat, код которого выводит данное сообщение. Эта информация помогает различить сообщения от разных блоков приложения (Middleware, Web Client), так как они выводятся в один файл.
-
пользователь - логин пользователя приложения, от имени которого в данный момент работает код, выводящий сообщение. Это позволяет в общем логе отслеживать активность конкретных пользователей. Если код, выводящий сообщение, не связан в момент вывода с пользовательской сессией, информация о пользователе не выводится.
Например, следующее сообщение в логе выведено кодом блока Middleware (
app-core), работающим от имени пользователяadmin:16:12:20.498 DEBUG [http-nio-8080-exec-7/app-core/admin] com.haulmont.cuba.core.app.DataManagerBean - loadList: ... -