Exam Area: Area 1 – Product Knowledge (15%) Reference: https://docs.developers.optimizely.com/content-management-system/docs/change-log
The Change Log is an audit trail of all content operations in CMS. It records every Save, Publish, Delete, and Move action, along with who performed it and when.
Access: /episerver/cms/admin → Change Log
| Field | Description |
|---|---|
| Date | Timestamp of the action |
| User | Username who performed the action |
| Action | Type of change (see table below) |
| Content | Content name and ContentLink |
| Language | Language branch affected |
| Content Type | Type of content (page, block, etc.) |
| Action | Description |
|---|---|
| CheckOut | A draft was created (content checked out for editing) |
| CheckIn | Draft saved |
| Publish | Content published |
| Reject | Content rejected in approval workflow |
| Abort | Editing session abandoned |
| Delete | Content deleted (moved to Trash) |
| Move | Content moved to a different location |
| DeleteLanguage | A language version deleted |
| MoveToTrash | Moved to the Recycle Bin |
In the Admin UI you can filter by:
// IChangeLogRepository provides access to the change log
public class ChangeLogService
{
private readonly IChangeLogRepository _changeLog;
public ChangeLogService(IChangeLogRepository changeLog)
{
_changeLog = changeLog;
}
// Get all changes for a specific content item
public IEnumerable<ChangeLogEntry> GetChangesForContent(ContentReference contentRef)
{
return _changeLog.List(contentRef);
}
// Get recent changes by a specific user
public IEnumerable<ChangeLogEntry> GetChangesByUser(
string username, DateTime from, DateTime to)
{
return _changeLog.List(
startDate: from,
endDate: to,
user: username);
}
}
public class ChangeLogEntry
{
public DateTime Date { get; } // When
public string User { get; } // Who
public ContentLink ContentLink { get; } // What content
public string ContentName { get; } // Display name
public ChangeType ChangeType { get; } // What action
public string Language { get; } // Which language
public string TypeName { get; } // Content type name
}
By default, the Change Log grows indefinitely. Consider:
// Custom job to purge old change log entries
[ScheduledPlugIn(DisplayName = "Purge Change Log", GUID = "...")]
public class PurgeChangeLogJob : ScheduledJobBase
{
private readonly IChangeLogRepository _changeLog;
public PurgeChangeLogJob(IChangeLogRepository changeLog)
{
_changeLog = changeLog;
}
public override string Execute()
{
var cutoff = DateTime.UtcNow.AddDays(-365);
// Delete change log entries older than 1 year
// (implementation via direct DB or repository method if available)
return "Purge complete.";
}
}
Only users in the WebAdmins role (or with Admin UI access) can view the Change Log.
| Feature | Change Log | Version History |
|---|---|---|
| Location | Admin UI | Edit View (per content item) |
| Scope | All content / site-wide | Single content item |
| Purpose | Audit trail | Restore previous versions |
| Filterable | By user/date/action | By date/version number |
| Restore | No | Yes |