我在使用 Maven 和 Embedded Glassfish 4 为已部署的应用程序正确配置日志记录时遇到问题。服务器将显示我已设置为 INFO 但未设置为 DEBUG 的日志消息。当部署到独立的 Glassfish 4 时,我的日志记录配置工作正常,但我无法弄清楚为什么它不在嵌入式版本上。
我的应用在 pom.xml 中有以下依赖项:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.0.7</version>
</dependency>
并且嵌入式 glassfish 插件在 pom.xml 中配置如下:
<plugin>
<groupId>org.glassfish.embedded</groupId>
<artifactId>maven-embedded-glassfish-plugin</artifactId>
<version>4.0</version>
<configuration>
<goalPrefix>embedded-glassfish</goalPrefix>
<name>ia</name>
<app>target/${project.artifactId}-${project.version}</app>
<autoDelete>true</autoDelete>
<configFile>glassfish/domain.xml</configFile>
</configuration>
<executions>
<!-- Start embedded GlassFish -->
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>deploy</id>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
<execution>
<id>stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>undeploy</goal>
<goal>stop</goal>
</goals>
</execution>
<!-- Run some admin commands -->
<execution>
<id>admin</id>
<phase>install</phase>
<goals>
<goal>admin</goal>
</goals>
<configuration>
<commands>
<param>list-applications</param>
</commands>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>${ojdbc6.version}</version>
<type>jar</type>
</dependency>
</dependencies>
</plugin>
注意 - 我使用了使用 Glassfish 的独立实例创建的 domain.xml 来为我提供各种预配置资源。
我的 logback.groovy 配置文件看起来像:
def appenderList = ["ROLLING"]
def WEBAPP_DIR = "."
def APPENDER_PATTERN = "%d{yyyy-MM-dd HH:mm:ss.SSS}:%5p:%c{1}:%M:%L: %m%n";
def consoleAppender = true;
println "Hostname is ${hostname}"
// does hostname match PROD?
if (hostname =~ /PROD/) { // TODO: replace this with actual produtcion server host URL pattern
WEBAPP_DIR = "/opt/myapp" // TODO: replace with actual web app directory
consoleAppender = false
} else {
appenderList.add("CONSOLE")
logger("uk.co.myapp", DEBUG, ["CONSOLE"])
}
if (consoleAppender) {
appender("CONSOLE", ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "${APPENDER_PATTERN}"
}
}
}
appender("ROLLING", RollingFileAppender) {
file = "${WEBAPP_DIR}/log/ia-log.log"
encoder(PatternLayoutEncoder) {
pattern = "${APPENDER_PATTERN}"
}
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "${WEBAPP_DIR}/log/ia-log-%d{yyyy-MM}.zip"
}
}
root(INFO, appenderList)
我已经弄清楚如何更改 Glassfish 服务器的 logging.properties,但到目前为止,我对这些设置的更改对我部署的应用程序没有影响,它们只是喷出大量与服务器相关的日志消息,而我并不关心.
我希望有人遇到过同样的问题并弄清楚如何正确配置它。
最好我想坚持使用 logback,但如果这意味着切换日志框架来解决这个问题,那么我很乐意这样做。