2016-06-15 1 views
2

Я использую Jetty 9.3.9.v20160517 в моем встроенных приложений, и я настроил протоколирование с использованием jetty-requestlog.xml как так:NullPointerException в RequestLogCollection Jetty 9.3.9

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> 

<!-- =============================================================== --> 
<!-- Configure the Jetty Request Log         --> 
<!-- =============================================================== --> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <!-- =========================================================== --> 
    <!-- Configure Request Log for Server       --> 
    <!-- (Use RequestLogHandler for a context specific RequestLog --> 
    <!-- =========================================================== --> 
    <Set name="RequestLog"> 
    <New id="RequestLog" class="org.eclipse.jetty.server.AsyncNCSARequestLog"> 
     <Set name="filename"><Property name="jetty.base" default="." /><Property> 
      <Name>jetty.requestlog.filePath</Name> 
      <Deprecated>requestlog.filename</Deprecated> 
      <Default><Property name="jetty.requestlog.dir" default="/logs"/>/yyyy_mm_dd.request.log</Default> 
     </Property> 
     </Set> 
     <Set name="filenameDateFormat"><Property name="jetty.requestlog.filenameDateFormat" deprecated="requestlog.filenameDateFormat" default="yyyy_MM_dd"/></Set> 
     <Set name="retainDays"><Property name="jetty.requestlog.retainDays" deprecated="requestlog.retain" default="90"/></Set> 
     <Set name="append"><Property name="jetty.requestlog.append" deprecated="requestlog.append" default="true"/></Set> 
     <Set name="extended"><Property name="jetty.requestlog.extended" deprecated="requestlog.extended" default="false"/></Set> 
     <Set name="logCookies"><Property name="jetty.requestlog.cookies" deprecated="requestlog.cookies" default="false"/></Set> 
     <Set name="LogTimeZone"><Property name="jetty.requestlog.timezone" deprecated="requestlog.timezone" default="GMT"/></Set> 
    </New> 
    </Set> 
</Configure> 

Однако, во время выполнения, когда Jetty фактически пытается чтобы регистрировать что-либо, я получаю следующий NPE каждый раз, когда я делаю запрос на сервер, хотя журналы, похоже, записываются в $jetty.base/logs/2016_06_15.request.log.

2016-06-15 22:19:23,302 [eXistThread-29] WARN (HttpChannel.java [handle]:479) - //localhost:8080/exist/apps/dashboard/modules/get-icon.xql?package=http://exist-db.org/apps/eXide 
java.lang.NullPointerException 
    at org.eclipse.jetty.server.RequestLogCollection.log(RequestLogCollection.java:44) ~[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.server.HttpChannel.onCompleted(HttpChannel.java:620) ~[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:453) [jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) [jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) [jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) [jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) [jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_92] 

Итак ... Что вызывает эти NPE и как их исправить?

+0

Вы не можете показывать в себе ваш код? –

+0

Уверенный код здесь - https://github.com/adamretter/exist/blob/jetty-9/src/org/exist/jetty/JettyStart.java#L190 – adamretter

+0

RequestLog не настроен в том источнике, с которым вы связались ?? –

ответ

0

Ваш XML load order is bad (см etc/enabled-jetty-config в источнике)

I mentioned this in an earlier answer.

Вот как вы можете видеть, как работает этот заказ.

Используйте jetty-distribution :-)

# Use a new empty base 
$ cd /path/to/mybase 

# Lets add the modules into this base 
$ java -jar /path/to/jetty-dist/start.jar --add-to-start=annotations,deploy,https,gzip,jmx,requestlog 
INFO: server   initialised (transitively) in ${jetty.base}/start.ini 
INFO: gzip   initialised in ${jetty.base}/start.ini 
INFO: jmx    initialised in ${jetty.base}/start.ini 
INFO: requestlog  initialised in ${jetty.base}/start.ini 
INFO: ssl    initialised (transitively) in ${jetty.base}/start.ini 
INFO: https   initialised in ${jetty.base}/start.ini 
INFO: deploy   initialised in ${jetty.base}/start.ini 
INFO: annotations  initialised in ${jetty.base}/start.ini 
MKDIR: ${jetty.base}/logs 
DOWNLOAD: https://raw.githubusercontent.com/eclipse/jetty.project/master/jetty-server/src/test/config/etc/keystore?id=master to ${jetty.base}/etc/keystore 
MKDIR: ${jetty.base}/webapps 
INFO: Base directory was modified 

# Lets ask the jetty-distribution what its XML load order is 
java -jar /path/to/jetty-dist/start.jar --list-config 
...(snip lots of output)... 
Jetty Active XMLs: 
------------------ 
${jetty.home}/etc/jetty.xml 
${jetty.home}/etc/jetty-gzip.xml 
${jetty.home}/etc/jetty-jmx.xml 
${jetty.home}/etc/jetty-requestlog.xml 
${jetty.home}/etc/jetty-ssl.xml 
${jetty.home}/etc/jetty-ssl-context.xml 
${jetty.home}/etc/jetty-https.xml 
${jetty.home}/etc/jetty-deploy.xml 
${jetty.home}/etc/jetty-plus.xml 
${jetty.home}/etc/jetty-annotations.xml 

Примечание: этот порядок загрузки может (и делает!) Изменения между выпусками Jetty. Не полагайтесь на то, что это единственный истинный порядок загрузки для всех версий Jetty, идущих вперёд. Вам либо придется реализовать ту же логику модуля start.jar, либо повторить этот jetty-distribution/start.jar --list-config с каждой модернизацией вашего проекта.

ПРЕДУПРЕЖДЕНИЕ: Не делайте этого, не следует смешивать jetty-distribution и embedded-jetty, вы просто создать много дополнительной работы для себя, увеличивая ваши задачи обслуживания и т.д. Используйте embedded-jetty* или *jetty-distribution непосредственно.

+0

Я ценю то, что вы говорите, но причал-распределение на самом деле соответствуют нашей потребности проекта. jetty-embedded намного ближе к тому, что нам нужно, однако мне очень нравится идея модульной конфигурации XML, поскольку она позволяет нашим пользователям перенастраивать причал именно так, как им нравится. Возможно, однако, я должен разбираться в модуле и просто иметь один XML-файл со всей конфигурацией? – adamretter

+0

Если я изменю заказ на то, что вы предлагаете, я получаю проблемы с файлами jetty-jaas.xml и jetty-gzip.xml. 'java.lang.IllegalStateException: Нет LoginService для [email protected]5c3f в [email protected] в org.eclipse.jetty.security.authentication.LoginAuthenticator .setConfiguration (LoginAuthenticator.java:76) ' и ' java.lang.ClassCastException: org.eclipse.jetty.server.handler.gzip.GzipHandler не может быть приведен к org.eclipse.jetty.server.handler.HandlerCollection ' – adamretter

+0

Тогда у вас есть 2 новых вопроса. (Кстати, ваш гибридный подход - это то, что вызывает у вас проблемы.Ваш 'embedded-jetty' делает предположения, что ваши XML-файлы на основе' jetty-distribution' не соответствуют) –

Смежные вопросы