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}}"
}