Logging
Last modified by Thomas Mortagne on 2009/08/31 10:15
Logging Event Listener
This example code shows how to implement an Event Listener in Groovy that logs page updates in the Main.Logger page.
import org.xwiki.observation.*
import org.xwiki.observation.event.*
import com.xpn.xwiki.web.*
import com.xpn.xwiki.*
class LoggingEventListener implements EventListener
{
def xwiki
def context
LoggingEventListener(xwiki, context)
{
this.xwiki = xwiki
this.context = context
}
String getName()
{
return "logging"
}
List<Event> getEvents()
{
return Arrays.asList(new DocumentUpdateEvent())
}
void onEvent(Event event, Object source, Object data)
{
// Prevent infinite recursion
if (source.fullName != "Main.Logger") {
def document = xwiki.getDocument("Main.Logger")
document.setContent("${document.getContent()}\n${source.fullName} has changed")
document.save("Logging event", true)
}
}
}
// Only register the listener if the user has passed confirm=1 in the URL. This is to prevent
// from unintentially re-registering the listener against the observation manager.
if (request.confirm == "1") {
// Register against the Observation Manager
def observation = Utils.getComponent(ObservationManager.class)
observation.removeListener("logging")
def listener = new LoggingEventListener(xwiki, xcontext)
observation.addListener(listener)
println "{{info}}Listener is now registered and will start logging page events in Main.Logger{{/info}}"
}
import org.xwiki.observation.event.*
import com.xpn.xwiki.web.*
import com.xpn.xwiki.*
class LoggingEventListener implements EventListener
{
def xwiki
def context
LoggingEventListener(xwiki, context)
{
this.xwiki = xwiki
this.context = context
}
String getName()
{
return "logging"
}
List<Event> getEvents()
{
return Arrays.asList(new DocumentUpdateEvent())
}
void onEvent(Event event, Object source, Object data)
{
// Prevent infinite recursion
if (source.fullName != "Main.Logger") {
def document = xwiki.getDocument("Main.Logger")
document.setContent("${document.getContent()}\n${source.fullName} has changed")
document.save("Logging event", true)
}
}
}
// Only register the listener if the user has passed confirm=1 in the URL. This is to prevent
// from unintentially re-registering the listener against the observation manager.
if (request.confirm == "1") {
// Register against the Observation Manager
def observation = Utils.getComponent(ObservationManager.class)
observation.removeListener("logging")
def listener = new LoggingEventListener(xwiki, xcontext)
observation.addListener(listener)
println "{{info}}Listener is now registered and will start logging page events in Main.Logger{{/info}}"
}