Вы устали просматривать огромный файл журнала, пытаясь найти нужную информацию при работе с Grails? Не смотрите дальше! В этой статье блога мы рассмотрим различные способы настройки Logback в Grails, чтобы вы могли организовывать журналы в отдельные файлы в соответствии с потребностями вашего приложения. Так что берите чашечку кофе, садитесь поудобнее и начнем!
Метод 1: файл конфигурации журнала
Первый метод предполагает создание файла конфигурации Logback в вашем приложении Grails. Создайте файл с именем logback.groovy(или logback.xml) в каталоге grails-app/conf. Этот файл будет содержать конфигурацию для входа в систему.
Вот базовый пример файла конфигурации Logback с двумя отдельными приложениями, каждое из которых записывает журналы в отдельный файл:
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.rolling.RollingFileAppender
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy
appender("FILE1", RollingFileAppender) {
file = "logs/app1.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/app1.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
appender("FILE2", RollingFileAppender) {
file = "logs/app2.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/app2.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
root(INFO, ["FILE1", "FILE2"])
В этом примере мы определяем два приложения (FILE1и FILE2) с соответствующими путями к файлам журналов. Мы также указываем шаблон формата сообщений журнала и настраиваем политику чередования для создания нового файла журнала каждый день (fileNamePattern = "logs/app1.%d{yyyy-MM-dd}.%i.log"). Свойство maxHistoryгарантирует сохранение только семи последних файлов журнала, а свойство cleanHistoryOnStartудаляет старые файлы журнала при запуске приложения.
Метод 2: использование DSL для ведения журналов Grails
Grails предоставляет удобный DSL для ведения журнала (Domain-Specific Language), который позволяет программно настраивать средства ведения журнала и приложения. Этот метод особенно полезен, если вы хотите динамически настраивать средства ведения журнала в зависимости от условий выполнения.
Вот пример того, как можно настроить различные файлы журналов с помощью Grails Logging DSL:
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.rolling.RollingFileAppender
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy
import grails.util.logging.Log
Log.logger("com.myapp.app1", INFO) {
appenders {
appender("FILE1", RollingFileAppender) {
file = "logs/app1.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/app1.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
}
}
Log.logger("com.myapp.app2", INFO) {
appenders {
appender("FILE2", RollingFileAppender) {
file = "logs/app2.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/app2.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
}
}
В этом примере мы используем метод Log.loggerдля определения средств ведения журнала для конкретных пакетов (com.myapp.app1и com.myapp.app2). Внутри каждого регистратора мы определяем соответствующее приложение и его конфигурацию, аналогично методу 1. Наконец, мы настраиваем корневой регистратор на определенный уровень журнала (INFO) и связываем его с определенными нами приложениями.
Метод 3: использование профилей журнала
Профили журналирования позволяют условно применять различные конфигурации ведения журнала в зависимости от различных факторов, таких как свойства среды или системы. Этот метод позволяет легко переключаться между различными конфигурациями журналов.
Вот пример того, как вы можете использовать профили Logback для входа в различные файлы:
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.rolling.RollingFileAppender
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy
import grails.util.Environment
if (Environment.current == Environment.DEVELOPMENT) {
appender("FILE1", RollingFileAppender) {
file = "logs/dev/app1.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/dev/app1.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
appender("FILE2", RollingFileAppender) {
file = "logs/dev/app2.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/dev/app2.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
} else {
appender("FILE1", RollingFileAppender) {
file = "logs/prod/app1.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/prod/app1.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
appender("FILE2", RollingFileAppender) {
file = "logs/prod/app2.log"
encoder(PatternLayoutEncoder) {
pattern = "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/prod/app2.%d{yyyy-MM-dd}.%i.log"
maxHistory = 7
cleanHistoryOnStart = true
}
}
}
root(INFO, ["FILE1", "FILE2"])
В этом примере мы используем класс Environmentиз Grails для проверки текущей среды. В зависимости от среды мы настраиваем различные приложения и пути к файлам журналов. В среде разработки журналы будут записываться в файлы в каталоге logs/dev, а в производственной среде журналы будут записываться в файлы в каталоге logs/prod.
Заключение
В этой статье мы рассмотрели различные способы настройки Logback в Grails и входа в различные файлы. Вы можете выбрать метод, который лучше всего соответствует вашим потребностям, исходя из требований вашего приложения. Независимо от того, предпочитаете ли вы подход с использованием файла конфигурации, использование Grails Logging DSL или профили Logback, организация журналов в отдельные файлы значительно повысит их читабельность и упростит устранение неполадок.
Не забудьте выбрать описательные имена для файлов журналов и каталогов, чтобы их можно было легко идентифицировать и обслуживать. Удачной регистрации!