2016-06-15 4 views
2

내 임베디드 응용 프로그램에서 부두 9.3.9.v20160517를 사용하고, 나는과 같이 jetty-requestlog.xml를 사용하여 로깅 설정 한 : 부두가 실제로 시도 할 때 런타임시,NullPointerException이 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.base/logs/2016_06_15.request.log에 쓰여진 것처럼 보이지만 서버에 요청할 때마다 다음 NPE를 얻을 수 있습니다.

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 버전에 대한 진정한로드 순서라는 것에 의존하지 마십시오. 동일한 start.jar 모듈 논리를 구현하거나 프로젝트를 업그레이드 할 때마다 jetty-distribution/start.jar --list-config을 다시 실행해야합니다.

경고 :이 작업을 수행하지 마십시오, embedded-jetty* 또는 *jetty-distribution를 사용 jetty-distributionembedded-jetty, 당신은 단지 등, 자신을위한 추가 작업을 많이 생성하는 유지 보수 작업을 증가 혼합하지 마십시오 직접.

+0

당신이 말하는 것에 감사 드리지만 부두 분배는 실제로는하지 않습니다. 우리의 프로젝트 필요에 부응하십시오. 부두 임베디드는 우리가 필요로하는 것보다 훨씬 가깝지만, 사용자가 부두를 좋아하는 방식으로 재구성 할 수 있으므로 모듈 식 XML 설정에 대한 아이디어를 정말 좋아합니다. 아마도 그러나 나는 모듈화를 도저히하고 모든 구성을 가진 하나의 XML 파일을 가지고 있어야합니까? – adamretter

+0

당신이 제안하는 순서대로 순서를 바꾸면, jetty-jaas.xml과 jetty-gzip.xml에 문제가 생깁니다. 'java.lang.IllegalStateException : org.eclipse.jetty.security.authentication.LoginAuthenticator에서 [email protected] 에서 [email protected]5c3f 없음 LoginService .setConfiguration (LoginAuthenticator.java:76)' 및 'java.lang.ClassCastException가 : org.eclipse.jetty.server.handler.gzip.GzipHandler는 org.eclipse.jetty.server.handler.HandlerCollection 캐스트 할 수없는 ' – adamretter

+0

다음 두 가지 새로운 질문이 있습니다. (BTW, 당신의 하이브리드 접근 방식은 당신에게 문제를 일으키는 원인입니다.당신의'embedded-jetty'는 여러분의'jetty-distribution' 기반 XML이 다음과 일치하지 않는다는 가정을하고 있습니다 : –