Audit logging data

KoboToolbox audit logging feature records all activities related to a specific form submission in a log file. This log file can include things like when the form was opened, when individual questions were answered, when the form was saved, and when it was finally submitted. This feature provides a detailed record of the timing and sequence of events associated with each form submission.

This feature is particularly beneficial for several reasons:

Audit logging data

The following form provides a simplified example to demonstrate how audit logs can be read using robotoolbox.

type name label parameters
start start
end end
username username
audit audit identify-user=true location-priority=balanced location-min-interval=60 location-max-age=120 track-changes=true track-changes-reasons=on-form-edit
text Q1 Q1. What is your name?
integer Q2 Q2. How old are you?

We have four metadata questions: start, end, username and audit. You need to have the audit metadata question enable to use this feature. We also have two questions: Q1 and Q2.

Loading the project

The above form was uploaded to the server. It’s the only project named Audit multi params, and can be selected from the list of assets asset_list (using kobo_asset_list).

library(robotoolbox)
library(dplyr)
asset_list <- kobo_asset_list()
uid <- filter(asset_list, name == "Audit multi params") |>
  pull(uid)
asset <- kobo_asset(uid)
asset
#> <robotoolbox asset>  aKQB8xLBd3nsJ7EZQmQhZd 
#>   Asset name: Audit multi params
#>   Asset type: survey
#>   Asset owner: dickoa
#>   Created: 2023-05-14 17:47:38
#>   Last modified: 2023-05-14 17:48:10
#>   Submissions: 3

Extracting the audit data

In order to get the audit logging, we need to use the kobo_audit function.

df <- kobo_audit(asset)
glimpse(df)
#> Rows: 29
#> Columns: 15
#> $ `_id`           <int> 28971011, 28971011, 28971011, 28971011, 28971011, 2897…
#> $ event           <chr> "form start", "location tracking enabled", "question",…
#> $ node            <chr> "", "", "/aKQB8xLBd3nsJ7EZQmQhZd/Q1", "", "/aKQB8xLBd3…
#> $ name            <chr> "", "", "Q1", "", "Q2", "", "", "", "", "", "", "Q1", …
#> $ start_int       <int64> 8.320496e-312, 8.320496e-312, 8.320496e-312, 8.32049…
#> $ end_int         <int64> 0.000000e+00, 0.000000e+00, 8.320497e-312, 0.000000e…
#> $ start           <dttm> 2023-05-14 18:00:33, 2023-05-14 18:00:33, 2023-05-14 …
#> $ end             <dttm> NA, NA, 2023-05-14 18:00:52, NA, 2023-05-14 18:00:54,…
#> $ latitude        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 14.72042, …
#> $ longitude       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, -17.46704,…
#> $ accuracy        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20, NA, NA…
#> $ `old-value`     <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", ""…
#> $ `new-value`     <chr> "", "", "Bill", "", "25", "", "", "", "", "", "", "Rob…
#> $ user            <chr> "Ahmadou", "Ahmadou", "Ahmadou", "Ahmadou", "Ahmadou",…
#> $ `change-reason` <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", ""…

The columns in the audit logging data include:

The structure of the output depends on the audit logging parameters you set in your form. For instance, if you set the parameter track-changes=true, the columns old-value and new-value become available. latitude, longitude and accuracy are associated to the parameter location-priority. The user column is available when you use the identify-user=true parameter. Using the parameter track-changes-reasons=on-form-edit prevents editing of filled-out forms without providing a reason. These reasons are recored in the change-reason column. You can learn how to use audit logging in the documentation of KoboToolbox and ODK.