Изменение местоположения файла Velocity.Log - PullRequest
5 голосов
/ 03 июня 2011

Кажется, довольно прямо. Документация на http://velocity.apache.org/engine/devel/developer-guide.html#Configuring_Logging говорит установить свойство runtime.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

1 Ответ

1 голос
/ 20 октября 2014

У меня была похожая проблема при настройке во время выполнения некоторых опций.Я выяснил эти проблемы с помощью пользовательского VelocityBuilder и внешнего файла speed.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);

Итак, у меня есть файл speed.properties в / WEB-INF, куда я помещаю некоторую конфигурацию:

    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" />

Таким образом, вы можете получить, например, другой файл журнала для другого приложения, и когда вы дадите войну в производство, sysadm может изменитьсвойства из-за конфигурации env производственного сервера.

...