Wiki source code of Logging

Version 13.1 by Vincent Massol on 2013/02/27

Show last authors
1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
4
5 = For XWiki 3.1 and beyond =
6
7 Starting with version 3.1 XWiki logs using [[SLF4J>>http://www.slf4j.org/]]. By default XWiki is configured so that SLF4J uses [[Logback>>http://logback.qos.ch/]]. XWiki's Logback configuration is located in the ##[[WEB-INF/classes/logback.xml>>https://raw.github.com/xwiki/xwiki-platform/master/xwiki-platform-core/xwiki-platform-web/src/main/resources/logback.xml]]## file.
8
9 XWiki is also configured by default so that any logs generated by 3rd part JARs used by XWiki (i.e. in the XWiki classpath at runtime) will automatically find their ways to the output defined by the Logback configuration file. This is active for Apache Commons Logging (JCL) and Log4J. This is achieved by using [[a SLF4J Bridge>>http://www.slf4j.org/legacy.html]] for both logging frameworks (it's the ##log4j-over-slf4j-*.jar## and ##jcl-over-slf4j-*.jar## files that provide this feature).
10
11 {{info}}
12 By default XWiki is configured to log everything on the console only. Whether the console is captured by your Servlet Container or not depends on the container you use. For example Tomcat on unix will capture stdout and add logs to the ##tomcat/logs/catalina.out## file.
13 {{/info}}
14
15 == Configuring Logging ==
16
17 === Manually ===
18
19 Simply edit the Logback configuration file (##logback.xml##) and restart the Servlet container for it to take effect.
20
21 === Using the Log Application ===
22
23 Starting with XWiki 4.2 a new [[Logging Application>>extensions:Extension.Logging Application]] is available in your wiki's administration UI and you can use it to configure the log levels for all features.
24
25 === Using JMX ===
26
27 [[LogBack exposes its configuration with JMX>>http://logback.qos.ch/manual/jmxConfig.html]] making it possible to use a JMX console to modify the logging configuration at runtime, thus not needing to restart the Servlet container. This is very useful in production when needing to debug an issue.
28
29 See the [[Monitoring Guide>>AdminGuide.Monitoring]] for more details on using JMX with XWiki.
30
31 == Analyzing logs with Lilith ==
32
33 [[Lilith>>http://lilith.huxhorn.de/]] is a logging and access event viewer. It makes it easy to analyze large quantities of logs. To use it, configure XWiki's Logging to send events to the Socket appender. Add the following to the ##logback.xml## file:
34
35 {{code language="xml"}}
36 ...
37 <appender name="socket" class="ch.qos.logback.classic.net.SocketAppender">
38 <RemoteHost>localhost</RemoteHost>
39 <Port>4560</Port>
40 <ReconnectionDelay>170</ReconnectionDelay>
41 <IncludeCallerData>true</IncludeCallerData>
42 </appender>
43 ...
44 {{/code}}
45
46 And add the new appender to the list of appenders to use. For example:
47
48 {{code language="xml"}}
49 ...
50 <root level="warn">
51 <appender-ref ref="stdout"/>
52 <appender-ref ref="socket"/>
53 </root>
54 ...
55 {{/code}}
56
57 Open Lilith (it's a desktop application) and it'll automatically listen on port 4560 so when you start XE you'll see its logs show up in Lilith.
58
59 For example:
60
61 [[image:lilith.png||style="width:950px"]]
62
63 == Using a different SLF4J implementation ==
64
65 If you wish, for example, to use Log4J to log all logs produced by XWiki you can do so by doing the following ([[described in the SLF4J manual>>hhttp://www.slf4j.org/manual.html]]):
66 * Remove the Logback SLF4J implementation from the classpath by removing ##WEB-INF/lib/logback-classic-*.jar## and ##WEB-INF/lib/logback-core-*.jar##
67 * Remove the Log4J over SLF4J JAR from the classpath by removing ##WEB-INF/lib/log4j-over-slf4j-*.jar##
68 * Add the Log4J SLF4J implementation to the classpath: ##slf4j-log4j*-*.jar##
69 * Add Log4J itself to the classpath
70
71 = For older XWiki versions =
72
73 XWiki versions 3.0 and older use Commons Logging for logging. By default XWiki is configured so that Commons Logging uses log4J. XWiki's Log4J configuration is located inside XWiki's JAR (xwiki-core-x.y.jar), in a ##[[log4j.properties>>https://raw.github.com/xwiki/xwiki-platform/13e01088e74c170452088a56fe54fb76a7ecb041/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/log4j.properties]]## file. XWiki' JAR is itself located in your ##WEB-INF/lib/## directory.
74
75 {{info}}
76 By default XWiki is configured to log everything on the console only.
77 {{/info}}
78
79 == Using a custom Log4J configuration ==
80
81 The best solution is to create a new ##log4j.properties## file in your ##WEB-INF/classes## directory. It'll thus override the one from the XWiki JAR. As an example, here's a sample configuration:
82
83 {{code language="none"}}
84 ### Direct log messages to stdout
85 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
86 log4j.appender.stdout.Target=System.out
87 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
88 log4j.appender.stdout.layout.ConversionPattern=%d [%X{url}] [%t] %-5p %-30.30c{2} %x - %m %n
89
90 ### By default everything that is of warning or severity WARN, ERROR or FATAL is logged both to
91 ### the console and to the xwiki.log file.
92 log4j.rootLogger=warn, stdout
93
94 ### Hibernate logging options
95 log4j.logger.org.hibernate=warn
96 log4j.logger.org.hibernate.SQL=warn
97 log4j.logger.org.hibernate.type=warn
98 log4j.logger.org.hibernate.ps.PreparedStatementCache=warn
99
100 ### XWiki logging configuration
101 log4j.logger.org.xwiki=info
102 log4j.logger.com.xpn.xwiki=warn
103 log4j.logger.com.xpn.xwiki.render.XWikiRadeoxRenderEngine=warn
104 log4j.logger.com.xpn.xwiki.store.migration=info
105
106 ### Deactive Struts warnings
107 log4j.logger.org.apache.struts.util.RequestUtils=error
108
109 ### Deactivate JGroups warnings
110 log4j.logger.org.jgroups=error
111
112 ## Deactive PDF Export CSS Applier warnings
113 log4j.logger.info.informatica.doc.style.css.dom=error
114 log4j.logger.org.apache.fop.layoutmgr.inline.ContentLayoutManager=error
115 {{/code}}
116
117 Refer to Log4J's documentation to understand the settings. As an example, to turn on Hibernate's calls, just set the following:
118
119 {{code}}
120 log4j.logger.org.hibernate.SQL=debug
121 {{/code}}
122
123 = Activating the XWiki Monitoring feature =
124
125 {{info}}
126 The monitoring feature is already active in the default configuration.
127 {{/info}}
128
129 XWiki has a feature to monitor times spent in its major components. To activate it, you need to:
130
131 * Enable the Monitor plugin by adding/modifying the following plugin definition in the ##xwiki.cfg## configuration file:
132 (((
133 {{code language="none"}}
134 xwiki.plugins=\
135 [...]
136 com.xpn.xwiki.monitor.api.MonitorPlugin
137 {{/code}}
138 )))
139 * Enable it by adding/modifying the following in the ##xwiki.cfg## configuration file:
140 (((
141 {{code language="none"}}
142 xwiki.monitor=1
143 {{/code}}
144 )))
145 * Since the plugin logs everything under the ##DEBUG## severity you also need to configure the XWiki Logging (as described above) by setting the ##com.xpn.xwiki.monitor## category to the ##DEBUG## level.
146 (((
147 For example for Logback it means adding the following in ##logback.xml##:
148
149 {{code language="none"}}
150 <logger name="com.xpn.xwiki.monitor" level="debug"/>
151 {{/code}}
152
153 And for older XWiki versions using Log4J it means adding the following in ##log4j.properties##:
154
155 {{code language="none"}}
156 log4j.logger.com.xpn.xwiki.monitor=debug
157 {{/code}}
158 )))

Get Connected