-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
349 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<parent> | ||
<groupId>org.eclipse.jetty.examples.embedded</groupId> | ||
<artifactId>jetty-embedded-examples</artifactId> | ||
<version>12.0.x</version> | ||
</parent> | ||
<artifactId>requestlog</artifactId> | ||
<version>12.0.x</version> | ||
<packaging>jar</packaging> | ||
<name>Jetty Examples :: Jetty 12.0.x :: Embedded :: Request Logging</name> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>org.eclipse.jetty</groupId> | ||
<artifactId>jetty-server</artifactId> | ||
<version>${jetty.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.eclipse.jetty</groupId> | ||
<artifactId>jetty-slf4j-impl</artifactId> | ||
<version>${jetty.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.eclipse.jetty.toolchain</groupId> | ||
<artifactId>jetty-test-helper</artifactId> | ||
<version>${jetty-test-helper.version}</version> | ||
<scope>test</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
</project> |
75 changes: 75 additions & 0 deletions
75
embedded/requestlog/src/main/java/examples/RequestLogToFileDemo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// | ||
// ======================================================================== | ||
// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others. | ||
// | ||
// This program and the accompanying materials are made available under the | ||
// terms of the Eclipse Public License v. 2.0 which is available at | ||
// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 | ||
// which is available at https://www.apache.org/licenses/LICENSE-2.0. | ||
// | ||
// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 | ||
// ======================================================================== | ||
// | ||
|
||
package examples; | ||
|
||
import java.nio.file.Files; | ||
import java.nio.file.Path; | ||
|
||
import org.eclipse.jetty.http.HttpHeader; | ||
import org.eclipse.jetty.http.HttpStatus; | ||
import org.eclipse.jetty.io.Content; | ||
import org.eclipse.jetty.server.AsyncRequestLogWriter; | ||
import org.eclipse.jetty.server.CustomRequestLog; | ||
import org.eclipse.jetty.server.Handler; | ||
import org.eclipse.jetty.server.Request; | ||
import org.eclipse.jetty.server.RequestLog; | ||
import org.eclipse.jetty.server.Response; | ||
import org.eclipse.jetty.server.Server; | ||
import org.eclipse.jetty.util.Callback; | ||
|
||
public class RequestLogToFileDemo | ||
{ | ||
public static void main(String[] args) throws Exception | ||
{ | ||
Path logsDir = Path.of("target/logs"); | ||
if (!Files.isDirectory(logsDir)) | ||
Files.createDirectories(logsDir); | ||
|
||
Server server = RequestLogToFileDemo.newServer(8080, logsDir); | ||
server.start(); | ||
server.join(); | ||
} | ||
|
||
public static Server newServer(int port, Path logsDir) | ||
{ | ||
Server server = new Server(port); | ||
|
||
Handler.Sequence handlers = new Handler.Sequence(); | ||
server.setHandler(handlers); | ||
handlers.addHandler(new Handler.Abstract() | ||
{ | ||
@Override | ||
public boolean handle(Request request, Response response, Callback callback) throws Exception | ||
{ | ||
if (request.getHttpURI().getPath().startsWith("/bogus")) | ||
Response.writeError(request, response, callback, HttpStatus.NOT_FOUND_404); | ||
else | ||
{ | ||
response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain; charset=utf-8"); | ||
Content.Sink.write(response, true, "Hello from " + RequestLogToFileDemo.class.getName(), callback); | ||
} | ||
return true; | ||
} | ||
}); | ||
|
||
AsyncRequestLogWriter requestLogWriter = new AsyncRequestLogWriter(); | ||
requestLogWriter.setAppend(true); | ||
requestLogWriter.setFilename(logsDir.resolve("request.log").toString()); | ||
requestLogWriter.setRetainDays(1); | ||
RequestLog requestLog = new CustomRequestLog(requestLogWriter, CustomRequestLog.EXTENDED_NCSA_FORMAT); | ||
server.setRequestLog(requestLog); | ||
|
||
return server; | ||
} | ||
} |
66 changes: 66 additions & 0 deletions
66
embedded/requestlog/src/main/java/examples/RequestLogToSlf4jDemo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// | ||
// ======================================================================== | ||
// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others. | ||
// | ||
// This program and the accompanying materials are made available under the | ||
// terms of the Eclipse Public License v. 2.0 which is available at | ||
// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 | ||
// which is available at https://www.apache.org/licenses/LICENSE-2.0. | ||
// | ||
// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 | ||
// ======================================================================== | ||
// | ||
|
||
package examples; | ||
|
||
import org.eclipse.jetty.http.HttpHeader; | ||
import org.eclipse.jetty.http.HttpStatus; | ||
import org.eclipse.jetty.io.Content; | ||
import org.eclipse.jetty.server.CustomRequestLog; | ||
import org.eclipse.jetty.server.Handler; | ||
import org.eclipse.jetty.server.Request; | ||
import org.eclipse.jetty.server.RequestLog; | ||
import org.eclipse.jetty.server.Response; | ||
import org.eclipse.jetty.server.Server; | ||
import org.eclipse.jetty.server.Slf4jRequestLogWriter; | ||
import org.eclipse.jetty.util.Callback; | ||
|
||
public class RequestLogToSlf4jDemo | ||
{ | ||
public static void main(String[] args) throws Exception | ||
{ | ||
Server server = RequestLogToSlf4jDemo.newServer(8080); | ||
server.start(); | ||
server.join(); | ||
} | ||
|
||
public static Server newServer(int port) | ||
{ | ||
Server server = new Server(port); | ||
|
||
Handler.Sequence handlers = new Handler.Sequence(); | ||
server.setHandler(handlers); | ||
handlers.addHandler(new Handler.Abstract() | ||
{ | ||
@Override | ||
public boolean handle(Request request, Response response, Callback callback) throws Exception | ||
{ | ||
if (request.getHttpURI().getPath().startsWith("/bogus")) | ||
Response.writeError(request, response, callback, HttpStatus.NOT_FOUND_404); | ||
else | ||
{ | ||
response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain; charset=utf-8"); | ||
Content.Sink.write(response, true, "Hello from " + RequestLogToSlf4jDemo.class.getName(), callback); | ||
} | ||
return true; | ||
} | ||
}); | ||
|
||
Slf4jRequestLogWriter requestLoggingWriter = new Slf4jRequestLogWriter(); | ||
requestLoggingWriter.setLoggerName("examples.requests"); | ||
RequestLog requestLog = new CustomRequestLog(requestLoggingWriter, CustomRequestLog.EXTENDED_NCSA_FORMAT); | ||
server.setRequestLog(requestLog); | ||
|
||
return server; | ||
} | ||
} |
3 changes: 3 additions & 0 deletions
3
embedded/requestlog/src/main/resources/jetty-logging.properties
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
org.eclipse.jetty.logging.appender.NAME_CONDENSE=false | ||
org.eclipse.jetty.LEVEL=INFO | ||
examples.LEVEL=INFO |
99 changes: 99 additions & 0 deletions
99
embedded/requestlog/src/test/java/examples/RequestLogToFileDemoTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
// | ||
// ======================================================================== | ||
// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others. | ||
// | ||
// This program and the accompanying materials are made available under the | ||
// terms of the Eclipse Public License v. 2.0 which is available at | ||
// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 | ||
// which is available at https://www.apache.org/licenses/LICENSE-2.0. | ||
// | ||
// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 | ||
// ======================================================================== | ||
// | ||
|
||
package examples; | ||
|
||
import java.io.IOException; | ||
import java.net.http.HttpClient; | ||
import java.net.http.HttpRequest; | ||
import java.net.http.HttpResponse; | ||
import java.nio.file.Files; | ||
import java.nio.file.Path; | ||
|
||
import org.eclipse.jetty.server.Server; | ||
import org.eclipse.jetty.toolchain.test.FS; | ||
import org.eclipse.jetty.toolchain.test.MavenPaths; | ||
import org.eclipse.jetty.util.component.LifeCycle; | ||
import org.junit.jupiter.api.AfterEach; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import static java.nio.charset.StandardCharsets.UTF_8; | ||
import static org.hamcrest.MatcherAssert.assertThat; | ||
import static org.hamcrest.Matchers.greaterThan; | ||
import static org.hamcrest.Matchers.is; | ||
|
||
public class RequestLogToFileDemoTest | ||
{ | ||
private static final Logger LOG = LoggerFactory.getLogger(RequestLogToFileDemoTest.class); | ||
private Server server; | ||
private Path logsDir; | ||
|
||
@BeforeEach | ||
public void startServer() throws Exception | ||
{ | ||
logsDir = MavenPaths.targetTestDir(RequestLogToFileDemoTest.class.getSimpleName()); | ||
FS.ensureDirExists(logsDir); | ||
|
||
server = RequestLogToFileDemo.newServer(0, logsDir); | ||
server.start(); | ||
} | ||
|
||
@AfterEach | ||
public void stopServer() | ||
{ | ||
LifeCycle.stop(server); | ||
} | ||
|
||
@Test | ||
public void testRequests() throws IOException, InterruptedException | ||
{ | ||
long fileSizeInitial = getActiveLogFileSize(); | ||
HttpClient client = HttpClient.newBuilder().build(); | ||
|
||
HttpRequest request = HttpRequest.newBuilder() | ||
.uri(server.getURI().resolve("/interesting/dir")) | ||
.version(HttpClient.Version.HTTP_1_1) | ||
.build(); | ||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString(UTF_8)); | ||
assertThat(response.statusCode(), is(200)); | ||
|
||
request = HttpRequest.newBuilder() | ||
.uri(server.getURI().resolve("/bogus/path")) | ||
.version(HttpClient.Version.HTTP_1_1) | ||
.build(); | ||
response = client.send(request, HttpResponse.BodyHandlers.ofString(UTF_8)); | ||
assertThat(response.statusCode(), is(404)); | ||
|
||
long fileSizeNow = getActiveLogFileSize(); | ||
assertThat("Request Log should have grown in size", fileSizeNow, greaterThan(fileSizeInitial)); | ||
} | ||
|
||
private long getActiveLogFileSize() | ||
{ | ||
try | ||
{ | ||
Path requestlog = logsDir.resolve("request.log"); | ||
if (Files.isRegularFile(requestlog)) | ||
return Files.size(requestlog); | ||
return -1; | ||
} | ||
catch (IOException e) | ||
{ | ||
LOG.warn("Unable to calculate log file size", e); | ||
return -1; | ||
} | ||
} | ||
} |
72 changes: 72 additions & 0 deletions
72
embedded/requestlog/src/test/java/examples/RequestLogToSlf4jDemoTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// | ||
// ======================================================================== | ||
// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others. | ||
// | ||
// This program and the accompanying materials are made available under the | ||
// terms of the Eclipse Public License v. 2.0 which is available at | ||
// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 | ||
// which is available at https://www.apache.org/licenses/LICENSE-2.0. | ||
// | ||
// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 | ||
// ======================================================================== | ||
// | ||
|
||
package examples; | ||
|
||
import java.io.IOException; | ||
import java.net.http.HttpClient; | ||
import java.net.http.HttpRequest; | ||
import java.net.http.HttpResponse; | ||
|
||
import org.eclipse.jetty.server.Server; | ||
import org.eclipse.jetty.util.component.LifeCycle; | ||
import org.junit.jupiter.api.AfterEach; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import static java.nio.charset.StandardCharsets.UTF_8; | ||
import static org.hamcrest.MatcherAssert.assertThat; | ||
import static org.hamcrest.Matchers.is; | ||
|
||
public class RequestLogToSlf4jDemoTest | ||
{ | ||
private static final Logger LOG = LoggerFactory.getLogger(RequestLogToSlf4jDemoTest.class); | ||
private Server server; | ||
|
||
@BeforeEach | ||
public void startServer() throws Exception | ||
{ | ||
LOG.warn("===== SEE Console Logging Output for \":INFO :examples.requests:\" entries ====="); | ||
|
||
server = RequestLogToSlf4jDemo.newServer(0); | ||
server.start(); | ||
} | ||
|
||
@AfterEach | ||
public void stopServer() | ||
{ | ||
LifeCycle.stop(server); | ||
} | ||
|
||
@Test | ||
public void testRequests() throws IOException, InterruptedException | ||
{ | ||
HttpClient client = HttpClient.newBuilder().build(); | ||
|
||
HttpRequest request = HttpRequest.newBuilder() | ||
.uri(server.getURI().resolve("/interesting/dir")) | ||
.version(HttpClient.Version.HTTP_1_1) | ||
.build(); | ||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString(UTF_8)); | ||
assertThat(response.statusCode(), is(200)); | ||
|
||
request = HttpRequest.newBuilder() | ||
.uri(server.getURI().resolve("/bogus/path")) | ||
.version(HttpClient.Version.HTTP_1_1) | ||
.build(); | ||
response = client.send(request, HttpResponse.BodyHandlers.ofString(UTF_8)); | ||
assertThat(response.statusCode(), is(404)); | ||
} | ||
} |