Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Velocity и Log4j


Автор: jk1 17.5.2010, 17:13
Доброго всем дня.

На этот раз пытаюсь перенаправить логи Velocity 1.6.3, так как дефолтный velocity.log  в папке web-приложения не устраивает. Выбор пал на используемый в проекте log4j 1.2.9, вот кстати его конфигурация (сразу оговорюсь - работает как часы):
Код

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.err"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p %c: %m%n"/>
        </layout>
    </appender>

    <appender name="jdbc" class="com.vc.oraclebridge.managment.JDBCAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p %c: %m%n"/>
        </layout>
    </appender>

    <logger name="dbms">
        <level value="info"/>
        <appender-ref ref="jdbc"/>
    </logger>

    <logger name="server">
        <level value="info"/>
        <appender-ref ref="console"/>
    </logger>

    <logger name="all">
        <level value="info"/>
        <appender-ref ref="console"/>
        <appender-ref ref="jdbc"/>
    </logger>

</log4j:configuration>

Проблема в том, что не получается заставить Velocity использовать логгер от Log4j. Пробовал так:
Код

VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute");
ve.setProperty("runtime.log.logsystem.log4j.logger", "server");
ve.init();

Получаю
Код

java.lang.RuntimeException: Velocity could not be initialized!
    at org.apache.velocity.runtime.RuntimeInstance.requireInitialization(RuntimeInstance.java:295)
    at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1398)
    at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)
    at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:305)
    at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:383)
    at com.vc.oraclebridge.facade.EndpointServlet.doGet(EndpointServlet.java:127)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at com.vc.oraclebridge.facade.AuthorizationFilter.doFilter(AuthorizationFilter.java:81)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.velocity.exception.VelocityException: Failed to initialize an instance of org.apache.velocity.runtime.log.Log4JLogChute with the current runtime configuration.
    at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:206)
    at org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:255)
    at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:795)
    at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:250)
    at org.apache.velocity.runtime.RuntimeInstance.requireInitialization(RuntimeInstance.java:290)
    ... 24 more
Caused by: java.lang.RuntimeException: Error configuring Log4JLogChute : 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.velocity.util.ExceptionUtils.createWithCause(ExceptionUtils.java:67)
    at org.apache.velocity.util.ExceptionUtils.createRuntimeException(ExceptionUtils.java:45)
    at org.apache.velocity.runtime.log.Log4JLogChute.initAppender(Log4JLogChute.java:133)
    at org.apache.velocity.runtime.log.Log4JLogChute.init(Log4JLogChute.java:85)
    at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:157)
    ... 28 more
Caused by: java.io.FileNotFoundException: velocity.log (Permission denied)
    at java.io.FileOutputStream.openAppend(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:177)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:102)
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:273)
    at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:156)
    at org.apache.log4j.FileAppender.<init>(FileAppender.java:97)
    at org.apache.log4j.RollingFileAppender.<init>(RollingFileAppender.java:60)
    at org.apache.velocity.runtime.log.Log4JLogChute.initAppender(Log4JLogChute.java:118)
    ... 30 more

Подскажите пожалуйста, что я делаю не так? 

Автор: Vasay 17.5.2010, 17:22
jk1, 

Может поможет http://velocity.apache.org/engine/devel/developer-guide.html#usinglog4jwithexistinglogger

Автор: jk1 18.5.2010, 10:29
Vasay, спасибо за пример, но такой способ как раз дает Exception из топика. Пробовал через файл конфигурации velocity.properties:
Код

runtime.log.logsysytem.class=org.apache.velocity.runtime.log.Log4JLogChute
runtime.log.logsystem.log4j.logger=server

файл жует, ошибок не выдает, но и логи не перенаправляет.
Может быть, есть еще идеи?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)