我正在开发一个spring-mvc / maven应用程序,它通过war文件部署在jboss上。我使用log4j将日志插入数据库。这是我的log4j.properties文件的片段。
log4j.rootLogger=ERROR, CONSOLE
log4j.logger.com.ge.epay.web.controller=INFO
log4j.logger.com.ge=ERROR
log4j.logger.org.springframework=ERROR
log4j.logger.org.acegisecurity=ERROR
log4j.logger.org.apache=ERROR
log4j.logger.java.sql=ERROR
log4j.logger.org.mybatis=ERROR
log4j.logger.com.mchange=ERROR
我希望将日志级别从ERROR更改为DEBUG,而无需在log4j.properties中进行更改后重新部署应用程序。
所以我将log4j.properties文件保留在战争之外,并在我的web.xml中使用了Log4jConfigListener。下面是我的web.xml文件的片段。
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>file:/some path</param-value>
</context-param>
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
<!-- Time interval in millisecond after which the log4j properties will
be refreshed from the external file -->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>1200000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
正如您所看到的,我在web.xml中将log4j.properies文件的路径定义为log4jConfigLocation参数。
我想在application.properties文件或environment.properties文件中定义此位置。
是否可以从属性文件中获取位置并在web.xml中使用它?
将log4j.properties文件保留在战争之外并从应用程序读取它是否安全?
提前谢谢。
答案 0 :(得分:0)
您的日志属性往往是从类路径中读取的,因此将属性文件的位置设置为类路径可能是您的解决方案
答案 1 :(得分:0)
@waquar我很晚了。但希望答案对初学者有用。
您可以使用表达式语言来提及log4j文件的路径,如下所示:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>file:#{systemProperties['user.home']}/somepath/log4j.properties</param-value>
</context-param>