RequestLogCollection Jetty 9.3.9中的NullPointerException

RequestLogCollection Jetty 9.3.9中的NullPointerException,jetty,embedded-jetty,jetty-9,Jetty,Embedded Jetty,Jetty 9,我在嵌入式应用程序中使用Jetty 9.3.9.v20160517,并使用Jetty requestlog.xml配置日志记录,如下所示: jetty.requestlog.filePath requestlog.filename /yyyy_mm_dd.request.log 然而,在运行时,当Jetty实际尝试记录任何内容时,每次向服务器发出请求时,我都会得到以下NPE,即使日志似乎确实写入了$Jetty.base/logs/2016\u 06\u 15.request.log 2016

我在嵌入式应用程序中使用Jetty 9.3.9.v20160517,并使用
Jetty requestlog.xml
配置日志记录,如下所示:


jetty.requestlog.filePath
requestlog.filename
/yyyy_mm_dd.request.log
然而,在运行时,当Jetty实际尝试记录任何内容时,每次向服务器发出请求时,我都会得到以下NPE,即使日志似乎确实写入了
$Jetty.base/logs/2016\u 06\u 15.request.log

2016-06-15 22:19:23302[eXistThread-29]警告(HttpChannel.java[handle]:479)-/localhost:8080/exist/apps/dashboard/modules/get icon.xql?包=http://exist-db.org/apps/eXide 
java.lang.NullPointerException
在org.eclipse.jetty.server.RequestLogCollection.log(RequestLogCollection.java:44)~[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.server.HttpChannel.onCompleted(HttpChannel.java:620)~[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517]
位于org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:453)[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.io.AbstractConnection$ReadCallback.successed(AbstractConnection.java:273)[jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)[jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)[jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.ExecuteProduceConsume(ExecuteProduceConsume.java:303)[jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)[jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517]
在org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)[jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517]
位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)[jetty-util-9.3.9.v201060517.jar:9.3.9.v201060517]
在org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)[jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517]
在java.lang.Thread.run(Thread.java:745)[?:1.8.0_92]
所以。。。造成这些NPE的原因是什么?我如何修复它们?请参见源代码中的
etc/enabled jetty config

这里有一个方法可以让你看到这个订单是如何运作的

使用
码头分配系统
:-)

注意:在Jetty的不同版本之间,此加载顺序可能(而且确实!)发生变化。 不要指望这是所有版本Jetty未来的一个真正的加载顺序。您要么必须实现相同的
start.jar
模块逻辑,要么在每次升级项目时重新执行此
jetty distribution/start.jar--list config

警告:不要这样做,不要将
码头配送
嵌入式码头
混用,你只是在为自己创造大量额外工作,增加维护任务等。直接使用
嵌入式码头
*或*
码头配送


确保代码在这里-RequestLog没有在您链接的源代码中设置??要加载的jetty配置文件列表从这里读取-配置
RequestLog
的实际配置文件在这里-我很感激您所说的,但是jetty分发版并不真正适合我们的项目需要。jetty embedded更接近我们的需要,但是我非常喜欢模块化XML配置的想法,因为它允许我们的用户按照他们喜欢的方式重新配置jetty。但是,也许我应该放弃模块化,只使用一个包含所有配置的XML文件?如果我将顺序更改为您建议的顺序,那么jetty-jaas.XML和jetty-gzip.XML都会出现问题<代码>java.lang.IllegalStateException:没有org.eclipse.jetty.security.authentication的登录服务。FormAuthenticator@57545c3f在org.eclipse.jetty.security中。ConstraintSecurityHandler@58fa5769位于org.eclipse.jetty.security.authentication.LoginAuthenticator.setConfiguration(LoginAuthenticator.java:76)
java.lang.ClassCastException:org.eclipse.jetty.server.handler.gzip.gzip不能强制转换为org.eclipse.jetty.server.handler.HandlerCollection
然后您有两个新问题。(顺便说一句,您的混合方法是导致您出现问题的原因。您的
嵌入式jetty
正在假设基于
jetty分发版的XML不符合要求)因此,您是否同意我在使用jetty embedded并需要外部配置文件时唯一合理的选择是只使用一个XML配置文件,所有的东西都在里面吗?单个XML和多个XML之间的决定是不相关的(两种选择都同样有效)。决策应该是关于控制、一致性和理解XML与嵌入jetty逻辑中XML设置后的代码之间设置的性质(现在,您只是在使用jetty分发XML,不了解XML需求,不了解XML的实际用途,并且对嵌入式jetty端不起作用感到沮丧)
# 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