Class Logger
- All Implemented Interfaces:
SessionFeature, Proxy
Debug logging support
Logger watches a Session and logs the HTTP traffic that
it generates, for debugging purposes. Many applications use an
environment variable to determine whether or not to use
Logger, and to determine the amount of debugging output.
To use Logger, first create a logger with Logger(), optionally
configure it with setRequestFilter(LoggerFilter),
setResponseFilter(LoggerFilter), and setPrinter(LoggerPrinter), and
then attach it to a session (or multiple sessions) with
Session.addFeature(SessionFeature).
By default, the debugging output is sent to stdout, and looks something
like:
> POST /unauth HTTP/1.1
> Soup-Debug-Timestamp: 1200171744
> Soup-Debug: SoupSession 1 (0x612190), SoupMessage 1 (0x617000), GSocket 1 (0x612220)
> Host: localhost
> Content-Type: text/plain
> Connection: close
< HTTP/1.1 201 Created
< Soup-Debug-Timestamp: 1200171744
< Soup-Debug: SoupMessage 1 (0x617000)
< Date: Sun, 12 Jan 2008 21:02:24 GMT
< Content-Length: 0
The Soup-Debug-Timestamp line gives the time (as a time_t) when the
request was sent, or the response fully received.
The Soup-Debug line gives further debugging information about the
Session, Message, and Socket involved; the hex
numbers are the addresses of the objects in question (which may be useful if
you are running in a debugger). The decimal IDs are simply counters that
uniquely identify objects across the lifetime of the Logger. In
particular, this can be used to identify when multiple messages are sent
across the same connection.
Currently, the request half of the message is logged just before
the first byte of the request gets written to the network (from the
Message::starting signal).
The response is logged just after the last byte of the response body is read
from the network (from the Message::got-body or
Message::got-informational signal), which means that the
Message::got-headers signal, and anything triggered off it (such as
Message::authenticate) will be emitted before the response headers are
actually logged.
If the response doesn't happen to trigger the Message::got-body nor
Message::got-informational signals due to, for example, a
cancellation before receiving the last byte of the response body, the
response will still be logged on the event of the Message::finished
signal.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classLogger.Builder<B extends Logger.Builder<B>>Inner class implementing a builder pattern to construct a GObject with properties.static classNested classes/interfaces inherited from class GObject
GObject.NotifyCallback, GObject.ObjectClassNested classes/interfaces inherited from interface SessionFeature
SessionFeature.SessionFeature$Impl, SessionFeature.SessionFeatureInterface -
Constructor Summary
ConstructorsConstructorDescriptionLogger()Create a new Logger.Logger(MemorySegment address) Create a Logger instance for the provided memory address.Logger(LoggerLogLevel level) Creates a newLoggerwith the given debug level. -
Method Summary
Modifier and TypeMethodDescriptionprotected LoggerasParent()Return this instance as if it were its parent type.static Logger.Builder<? extends Logger.Builder> builder()ALogger.Builderobject constructs aLoggerwith the specified properties.intGet the maximum body size forlogger.static MemoryLayoutThe memory layout of the native struct.static @Nullable TypegetType()Get the GType of the Logger class.voidsetMaxBodySize(int maxBodySize) Sets the maximum body size for this Logger (-1 means no limit).voidsetPrinter(@Nullable LoggerPrinter printer) Sets up an alternate log printing routine, if you don't want the log to go tostdout.voidsetRequestFilter(@Nullable LoggerFilter requestFilter) Sets up a filter to determine the log level for a given request.voidsetResponseFilter(@Nullable LoggerFilter responseFilter) Sets up a filter to determine the log level for a given response.Methods inherited from class GObject
addToggleRef, addWeakPointer, bindProperty, bindProperty, bindProperty, bindPropertyFull, bindPropertyFull, bindPropertyWithClosures, bindPropertyWithClosures, compatControl, connect, connect, connect, constructed, disconnect, dispatchPropertiesChanged, dispose, dupData, dupQdata, emit, emitNotify, finalize_, forceFloating, freezeNotify, get, getData, getProperty, getProperty, getProperty, getQdata, getv, interfaceFindProperty, interfaceInstallProperty, interfaceListProperties, isFloating, newInstance, newInstance, newv, notify, notify, notifyByPspec, onNotify, ref, refSink, removeToggleRef, removeWeakPointer, replaceData, replaceQdata, runDispose, set, setData, setDataFull, setProperty, setProperty, setProperty, setQdata, setQdataFull, setv, stealData, stealQdata, takeRef, thawNotify, unref, watchClosure, weakRef, weakUnref, withPropertiesMethods inherited from class TypeInstance
callParent, callParent, cast, getPrivate, readGClass, writeGClassMethods inherited from class ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
Logger
Create a Logger instance for the provided memory address.- Parameters:
address- the memory address of the native object
-
Logger
Creates a new
Loggerwith the given debug level.If you need finer control over what message parts are and aren't logged, use
setRequestFilter(LoggerFilter)andsetResponseFilter(LoggerFilter).- Parameters:
level- the debug level
-
Logger
public Logger()Create a new Logger.
-
-
Method Details
-
getType
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
asParent
-
getMaxBodySize
public int getMaxBodySize()Get the maximum body size forlogger.- Returns:
- the maximum body size, or -1 if unlimited
-
setMaxBodySize
public void setMaxBodySize(int maxBodySize) Sets the maximum body size for this Logger (-1 means no limit).- Parameters:
maxBodySize- the maximum body size to log
-
setPrinter
Sets up an alternate log printing routine, if you don't want the log to go tostdout.- Parameters:
printer- the callback for printing logging output
-
setRequestFilter
Sets up a filter to determine the log level for a given request.
For each HTTP request this Logger will invoke
requestFilterto determine how much (if any) of that request to log. (If you do not set a request filter, this Logger will just always log requests at the level passed toLogger().)- Parameters:
requestFilter- the callback for request debugging
-
setResponseFilter
Sets up a filter to determine the log level for a given response.
For each HTTP response this Logger will invoke
responseFilterto determine how much (if any) of that response to log. (If you do not set a response filter, this Logger will just always log responses at the level passed toLogger().)- Parameters:
responseFilter- the callback for response debugging
-
builder
ALogger.Builderobject constructs aLoggerwith the specified properties. Use the variousset...()methods to set properties, and finish construction withLogger.Builder.build().- Returns:
- the builder object
-