Asciidoctor is a great tool for writing technical documentation. The documentation to our Java source is what we write in Javadoc comments. Wouldn't it be nice if we could use Asciidoctor in our Javadoc comments? Of course! We can achieve this with the Asciidoclet Javadoc doclet. The doclet processes the Javadoc comments as Asciidoctor source and generates HTML in the final Javadoc documentation. We can use all of Asciidoc syntax like tables, lists, include directives, styling and more. We can even use Asciidoctor extensions like asciidoctor-diagram.
In the following Java source code we have Javadoc comments with Asciidoctor syntax. We have document attributes, list, styling, include macro, table and asciidoctor-diagram code in our Javadoc. Notice that we don't have the clutter of HTML tags we normally we would have if we write Javadoc.
Continue reading →
In a previous post we learned how to log request information in common log or NCSA format. But we can also provide our own implementation of a RequestLogger
to log for example the time spent in processing a request. One of the easiest ways to do this is by using the RequestLogger.of
method. We can provide a lambda expression or closure for this method with an argument type RequestOutcome
. The RequestOutcome
class has properties to access the request and sent response objects. And it also contains a Duration
object which has the duration of the time spent for the total request (all handlers in the chain). This doesn't include the necessary time to send the request to the client.
import ratpack.handling.RequestLogger
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
// Here we use the of method to implement
// custom request logging.
all(RequestLogger.of { outcome ->
// Only log when logger is enabled.
if (RequestLogger.LOGGER.infoEnabled) {
// Log how long the request handling took.
RequestLogger.LOGGER.info(
'Request for {} took {}.{} seconds.',
outcome.request.uri,
outcome.duration.seconds,
outcome.duration.nano)
}
})
get {
render 'Ratpack rules!'
}
}
}
Continue reading →
Ratpack comes with a special handler to log requests in the common log or NCSA format. We need the (default) interface ratpack.handling.RequestLogger
which has a method ncsa
that returns a handler instance capable of logging our request data.
In the following example code we have a Groovy DSL definition of our Ratpack application. We use the all
method to add the request logger. The RequestLogger
implementation will make sure the complete handler chain is finished before logging the information.
Continue reading →
To start our Ratpack application with a random port number we must use the value 0
as port number. The value 0
tells Ratpack to use a random port number (in a safe port range).
In the following example Ratpack application we configure the server port to be random:
Continue reading →