Ported logging guide from HttpClient 3.x
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@748870 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d3389a9b7b
commit
6bf5825254
|
@ -0,0 +1,288 @@
|
|||
~~ $HeadURL:$
|
||||
~~ $Revision:$
|
||||
~~ $Date:$
|
||||
~~
|
||||
~~ ====================================================================
|
||||
~~ Licensed to the Apache Software Foundation (ASF) under one
|
||||
~~ or more contributor license agreements. See the NOTICE file
|
||||
~~ distributed with this work for additional information
|
||||
~~ regarding copyright ownership. The ASF licenses this file
|
||||
~~ to you under the Apache License, Version 2.0 (the
|
||||
~~ "License"); you may not use this file except in compliance
|
||||
~~ with the License. You may obtain a copy of the License at
|
||||
~~
|
||||
~~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~~
|
||||
~~ Unless required by applicable law or agreed to in writing,
|
||||
~~ software distributed under the License is distributed on an
|
||||
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
~~ KIND, either express or implied. See the License for the
|
||||
~~ specific language governing permissions and limitations
|
||||
~~ under the License.
|
||||
~~ ====================================================================
|
||||
~~
|
||||
~~ This software consists of voluntary contributions made by many
|
||||
~~ individuals on behalf of the Apache Software Foundation. For more
|
||||
~~ information on the Apache Software Foundation, please see
|
||||
~~ <http://www.apache.org/>.
|
||||
|
||||
----------
|
||||
HttpClient Logging Practices
|
||||
----------
|
||||
----------
|
||||
----------
|
||||
|
||||
Logging Practices
|
||||
|
||||
Being a library HttpClient is not to dictate which logging framework the user has to use.
|
||||
Therefore HttpClient utilizes the logging interface provided by the
|
||||
{{{http://commons.apache.org/logging/}Commons Logging}} package. <<<Commons Logging>>> provides
|
||||
a simple and generalized
|
||||
{{{http://commons.apache.org/logging/commons-logging-1.0.4/docs/apidocs/}log interface}} to
|
||||
various logging packages. By using <<<Commons Logging>>>, HttpClient can be configured for a
|
||||
variety of different logging behaviours. That means the user will have to make a choice which
|
||||
logging framework to use. By default <<<Commons Logging>>> supports the following logging
|
||||
frameworks:
|
||||
|
||||
* {{{http://logging.apache.org/log4j/docs/index.html}Log4J}}
|
||||
|
||||
* {{{http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/package-summary.html}
|
||||
java.util.logging}}
|
||||
|
||||
* {{{http://commons.apache.org/logging/commons-logging-1.0.4/docs/apidocs/org/apache/commons/logging/impl/SimpleLog.html}
|
||||
SimpleLog}} (internal to <<<Commons Logging>>>)
|
||||
|
||||
By implementing some simple interfaces <<<Commons Logging>>> can be extended to support
|
||||
basically any other custom logging framework. <<<Commons Logging>>> tries to automatically
|
||||
discover the logging framework to use. If it fails to select the expected one, you must
|
||||
configure <<<Commons Logging>>> by hand. Please refer to the <<<Commons Logging>>>
|
||||
documentation for more information.
|
||||
|
||||
HttpClient performs three different kinds of logging: the standard context logging used within
|
||||
each class, HTTP header logging and full wire logging.
|
||||
|
||||
* Context Logging
|
||||
|
||||
Context logging contains information about the internal operation of HttpClient as it performs
|
||||
HTTP requests. Each class has its own log named according to the class's fully qualified name.
|
||||
For example the class <<<DefaultHttpClient>>> has a log named
|
||||
<<<org.apache.http.impl.client.DefaultHttpClient>>>. Since all classes follow this convention
|
||||
it is possible to configure context logging for all classes using the single log named
|
||||
<<<org.apache.http.impl.client>>>.
|
||||
|
||||
* Wire Logging
|
||||
|
||||
The wire log is used to log all data transmitted to and from servers when executing HTTP
|
||||
requests. The wire log uses the {{{org.apache.http.wire}}} logging category. This log should
|
||||
only be enabled to debug problems, as it will produce an extremely large amount of log data.
|
||||
|
||||
* HTTP header Logging
|
||||
|
||||
Because the content of HTTP requests is usually less important for debugging than the HTTP
|
||||
headers, the {{{org.apache.http.headers}}} logging category for capturing HTTP headers only.
|
||||
|
||||
* Configuration Examples
|
||||
|
||||
<<<Commons Logging>>> can delegate to a variety of loggers for processing the actual output.
|
||||
Below are configuration examples for <<<Commons Logging>>>, <<<Log4j>>> and
|
||||
<<<java.util.logging>>>.
|
||||
|
||||
** Commons Logging Examples
|
||||
|
||||
<<<Commons Logging>>> comes with a basic logger called <<<SimpleLog>>>. This logger writes all
|
||||
logged messages to <<<System.err>>>. The following examples show how to configure
|
||||
<<<Commons Logging>>> via system properties to use <<<SimpleLog>>>. It is strongly recommended
|
||||
to configure <<<Commons Logging>>> system properties through JVM process arguments at the
|
||||
start up.
|
||||
|
||||
* Enable header wire + context logging - <<Best for Debugging>>
|
||||
|
||||
--------------------------------------
|
||||
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
|
||||
-Dorg.apache.commons.logging.simplelog.showdatetime=true
|
||||
-Dorg.apache.commons.logging.simplelog.log.org.apache.http=DEBUG
|
||||
-Dorg.apache.commons.logging.simplelog.log.org.apache.http.wire=ERROR
|
||||
--------------------------------------
|
||||
|
||||
* Enable full wire + context logging
|
||||
|
||||
--------------------------------------
|
||||
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
|
||||
-Dorg.apache.commons.logging.simplelog.showdatetime=true
|
||||
-Dorg.apache.commons.logging.simplelog.log.org.apache.http=DEBUG
|
||||
--------------------------------------
|
||||
|
||||
* Enable context logging for connection management
|
||||
|
||||
--------------------------------------
|
||||
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
|
||||
-Dorg.apache.commons.logging.simplelog.showdatetime=true
|
||||
-Dorg.apache.commons.logging.simplelog.log.org.apache.http.impl.conn=DEBUG
|
||||
--------------------------------------
|
||||
|
||||
* Enable context logging for connection management / request execution
|
||||
|
||||
--------------------------------------
|
||||
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
|
||||
-Dorg.apache.commons.logging.simplelog.showdatetime=true
|
||||
-Dorg.apache.commons.logging.simplelog.log.org.apache.http.impl.conn=DEBUG
|
||||
-Dorg.apache.commons.logging.simplelog.log.org.apache.http.impl.client=DEBUG
|
||||
-Dorg.apache.commons.logging.simplelog.log.org.apache.http.client=DEBUG
|
||||
--------------------------------------
|
||||
|
||||
** Log4j Examples
|
||||
|
||||
The simplest way to configure <<<Log4j>>> is via a <<<log4j.properties>>> file. <<<Log4j>>>
|
||||
will automatically read and configure itself using a file named <<<log4j.properties>>> when
|
||||
it's present at the root of the application classpath. Below are some <<<Log4j>>> configuration
|
||||
examples.
|
||||
|
||||
<<Note:>> <<<Log4j>>> is not included in the <<<HttpClient>>> distribution.
|
||||
|
||||
* Enable header wire + context logging - <<Best for Debugging>>
|
||||
|
||||
--------------------------------------
|
||||
log4j.rootLogger=INFO, stdout
|
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n
|
||||
|
||||
log4j.logger.org.apache.http=DEBUG
|
||||
log4j.logger.org.apache.http.wire=ERROR
|
||||
--------------------------------------
|
||||
|
||||
* Enable full wire + context logging
|
||||
|
||||
--------------------------------------
|
||||
log4j.rootLogger=INFO, stdout
|
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n
|
||||
|
||||
log4j.logger.org.apache.http=DEBUG
|
||||
--------------------------------------
|
||||
|
||||
* Enable context logging for connection management
|
||||
|
||||
--------------------------------------
|
||||
log4j.rootLogger=INFO, stdout
|
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n
|
||||
|
||||
log4j.logger.org.apache.http.impl.conn=DEBUG
|
||||
--------------------------------------
|
||||
|
||||
* Enable context logging for connection management / request execution
|
||||
|
||||
--------------------------------------
|
||||
log4j.rootLogger=INFO, stdout
|
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n
|
||||
|
||||
log4j.logger.org.apache.http.impl.conn=DEBUG
|
||||
log4j.logger.org.apache.http.impl.client=DEBUG
|
||||
log4j.logger.org.apache.http.client=DEBUG
|
||||
--------------------------------------
|
||||
|
||||
[]
|
||||
|
||||
Note that the default configuration for Log4J is very inefficient as it causes all the logging
|
||||
information to be generated but not actually sent anywhere. The <<<Log4J>>> manual is the
|
||||
best reference for how to configure <<<Log4J>>>. It is available at
|
||||
{{{http://logging.apache.org/log4j/docs/manual.html}
|
||||
http://logging.apache.org/log4j/docs/manual.html}}.
|
||||
|
||||
** java.util.logging Examples
|
||||
|
||||
Since JDK 1.4 there has been a package
|
||||
{{{http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/package-summary.html}
|
||||
java.util.logging}} that provides a logging framework similar to <<<Log4J>>>. By default it
|
||||
reads a config file from <<<$JAVA_HOME/jre/lib/logging.properties>>> which looks like this
|
||||
(comments stripped):
|
||||
|
||||
--------------------------------------
|
||||
handlers=java.util.logging.ConsoleHandler
|
||||
.level=INFO
|
||||
java.util.logging.FileHandler.pattern = %h/java%u.log
|
||||
java.util.logging.FileHandler.limit = 50000
|
||||
java.util.logging.FileHandler.count = 1
|
||||
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
|
||||
java.util.logging.ConsoleHandler.level = INFO
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
com.xyz.foo.level = SEVERE
|
||||
--------------------------------------
|
||||
|
||||
To customize logging a custom <<<logging.properties>>> file should be created in the project
|
||||
directory. The location of this file must be passed to the JVM as asystem property. This can be
|
||||
done on the command line like so:
|
||||
|
||||
--------------------------------------
|
||||
$JAVA_HOME/java -Djava.util.logging.config.file=$HOME/myapp/logging.properties
|
||||
-classpath $HOME/myapp/target/classes com.myapp.Main
|
||||
--------------------------------------
|
||||
|
||||
Alternatively {{{http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/LogManager.html#readConfiguration(java.io.InputStream)"}
|
||||
LogManager#readConfiguration(InputStream)}} can be used to pass it the desired configuration.
|
||||
|
||||
* Enable header wire + context logging - <<Best for Debugging>>
|
||||
|
||||
--------------------------------------
|
||||
.level = INFO
|
||||
|
||||
handlers=java.util.logging.ConsoleHandler
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.ConsoleHandler.level = ALL
|
||||
|
||||
org.apache.http.level = FINEST
|
||||
org.apache.http.wire.level = ERROR
|
||||
--------------------------------------
|
||||
|
||||
* Enable full wire + context logging
|
||||
|
||||
--------------------------------------
|
||||
.level = INFO
|
||||
|
||||
handlers=java.util.logging.ConsoleHandler
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.ConsoleHandler.level = ALL
|
||||
|
||||
org.apache.http.level = FINEST
|
||||
--------------------------------------
|
||||
|
||||
* Enable context logging for connection management
|
||||
|
||||
--------------------------------------
|
||||
.level = INFO
|
||||
|
||||
handlers=java.util.logging.ConsoleHandler
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.ConsoleHandler.level = ALL
|
||||
|
||||
org.apache.http.impl.conn.level = FINEST
|
||||
--------------------------------------
|
||||
|
||||
* Enable context logging for connection management / request execution
|
||||
|
||||
--------------------------------------
|
||||
.level = INFO
|
||||
|
||||
handlers=java.util.logging.ConsoleHandler
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.ConsoleHandler.level = ALL
|
||||
|
||||
org.apache.http.impl.conn.level = FINEST
|
||||
org.apache.http.impl.client.level = FINEST
|
||||
org.apache.http.client.level = FINEST
|
||||
--------------------------------------
|
||||
|
||||
[]
|
||||
|
||||
More detailed information is available from the
|
||||
{{{"http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html"}
|
||||
Java Logging documentation}}.
|
Loading…
Reference in New Issue