2011-06-02 64 views
5

似乎很簡單。文檔http://velocity.apache.org/engine/devel/developer-guide.html#Configuring_Logging 表示設置runtime.log屬性。這就是我的所有財產。更改Velocity.Log文件的位置

velocityEngine.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, templatesPath); 

      velocityEngine.setProperty("runtime.log", "/path/to/my/file/velocity.log"); 
      velocityEngine.setProperty("resource.loader", "string"); 
      velocityEngine.setProperty("string.resource.loader.class", "org.apache.velocity.runtime.resource.loader.StringResourceLoader"); 
      velocityEngine.setProperty("string.resource.loader.repository.class", "org.apache.velocity.runtime.resource.util.StringResourceRepositoryImpl"); 

沒有發現任何日誌文件,其中我告訴它把它轉而尋找放置到原來的位置(初始化文件夾)的新的錯誤。有任何想法嗎? :D

+0

這對我來說很合適。該位置是否具有正確的權限?作爲替代方案,您還可以使用log4j並將其合併到常規應用程序日誌中。 – 2011-06-12 20:41:19

回答

1

我在運行時設置一些選項時遇到了類似的問題。我想出了一個自定義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可以更改屬性。