我在運行時設置一些選項時遇到了類似的問題。我想出了一個自定義VelocityBuilder和外部velocity.properties文件的問題,您可以在其中放置所有運行時屬性。 下面是代碼:
public class BaseVelocityBuilder implements VelocityBuilder {
private VelocityEngine engine;
private Log logger = LogFactory.getLog(getClass());
@Autowired
private WebApplicationContext webApplicationContext;
public VelocityEngine engine() {
if(engine == null) {
engine = new VelocityEngine();
Properties properties = new Properties();
InputStream in = null;
try {
in = webApplicationContext.getServletContext().getResourceAsStream("/WEB-INF/velocity.properties");
properties.load(in);
engine.init(properties);
} catch (IOException e) {
e.printStackTrace();
logger.error("Error loading velocity engine properties");
throw new ProgramException("Cannot load velocity engine properties");
}
IOUtils.closeQuietly(in);
}
return engine;
}
}
看到這一行:
in = webApplicationContext.getServletContext().getResourceAsStream("/WEB-INF/velocity.properties");
properties.load(in);
engine.init(properties);
所以我在/ WEB-INF一個velocity.properties文件,其中我把一些配置:
resource.loader = webinf, class
webinf.resource.loader.description = Framework Templates Resource Loader
webinf.resource.loader.class = applica.framework.library.velocity.WEBINFResourceLoader
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path =
file.resource.loader.description = Velocity File Resource Loader
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path =
class.resource.loader.description = Velocity Classpath Resource Loader
class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
runtime.log='/pathYouWant/velocity.log'
最後在application.xml中:
<bean class="applica.framework.library.velocity.BaseVelocityBuilder" />
通過這種方式,您可以爲不同的應用程序創建不同的文件日誌,並且當您在生產中進行戰爭時,由於生產服務器的env配置,sysadm可以更改屬性。
這對我來說很合適。該位置是否具有正確的權限?作爲替代方案,您還可以使用log4j並將其合併到常規應用程序日誌中。 – 2011-06-12 20:41:19