Logging
Appkit provides support for tracking the activity of specific events and logging them either to the console or a file depending on how your application is set up.
Log activity events
To log activity events, perform the steps in this section.
1: Update the POM
To log activity events, first add these dependencies to your pom.xml
file:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>twigkit</groupId>
<artifactId>twigkit.activity.logger</artifactId>
<version>${project.parent.version}</version>
</dependency>
2: Create an activity logging configuration file
In conf/activity/tracking
, place a logger.conf
file. In the file, set the property logging-enabled
equal to true
:
logging-enabled: true
If logging-enabled
is set to false
, then all logging will be disabled.
3: Create a logback.xml file
Create a logback.xml
file in /resources
and configure this to either output activity data to the console or a file (or both).
For example, to output logging activity to the console:
<configuration debug="true" scan="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>false</withJansi>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%logger{36}) - %msg %n</pattern>
</encoder>
</appender>
<logger name="twigkit" level="INFO"/>
<logger name="twigkit.activity.subscribers" level="TRACE"/>
<root level="ERROR">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
To output logging activity to a file, while all other logging is redirected to the console:
<configuration debug="true" scan="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>false</withJansi>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%logger{36}) - %msg %n</pattern>
</encoder>
</appender>
<appender name="activity-log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/activity.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- Daily rollover. Make sure the path matches the one in the file element or else
the rollover logs are placed in the working directory. -->
<fileNamePattern>./logs/activity_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} - %msg %n</pattern>
</encoder>
</appender>
<logger name="twigkit" level="INFO"/>
<logger name="twigkit.activity.subscribers" level="TRACE" additivity="false">
<appender-ref ref="activity-log"/>
</logger>
<root level="ERROR">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
The location of the file is set in the file
tag and is relative to the root of the application.
Example
A typical example of what you might see in the log is:
16:33:51.711 - type:response,user:user,query:US,hits:2437,page:1,time:104
16:33:52.907 - type:response,user:user,query:US,hits:2437,page:1,time:106
16:33:54.191 - type:click,username:user,URL:http://twigkit.com/kapps_kyc/customers/519/,host:twigkit.com
Where, for example, the type
refers to whether the event is a click or response, the user
is the name of the user, query
shows the query terms, hits
is the number of hits returned in the response, page
is the page number, and URL
is the URL associated with the click.