📚 Product Knowledge
Change Log
📖 Docs

Change Log - Optimizely CMS 12

Exam Area: Area 1 – Product Knowledge (15%) Reference: https://docs.developers.optimizely.com/content-management-system/docs/change-log


1. What is the 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


2. Change Log Fields

FieldDescription
DateTimestamp of the action
UserUsername who performed the action
ActionType of change (see table below)
ContentContent name and ContentLink
LanguageLanguage branch affected
Content TypeType of content (page, block, etc.)

3. Action Types

ActionDescription
CheckOutA draft was created (content checked out for editing)
CheckInDraft saved
PublishContent published
RejectContent rejected in approval workflow
AbortEditing session abandoned
DeleteContent deleted (moved to Trash)
MoveContent moved to a different location
DeleteLanguageA language version deleted
MoveToTrashMoved to the Recycle Bin

4. Filtering the Change Log

In the Admin UI you can filter by:


5. Programmatic Access

// 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);
    }
}

6. ChangeLogEntry Properties

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
}

7. Change Log Retention

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

8. Security: Who Can View the Change Log?

Only users in the WebAdmins role (or with Admin UI access) can view the Change Log.


9. Change Log vs. Version History

FeatureChange LogVersion History
LocationAdmin UIEdit View (per content item)
ScopeAll content / site-wideSingle content item
PurposeAudit trailRestore previous versions
FilterableBy user/date/actionBy date/version number
RestoreNoYes

Review Questions

  1. What Admin panel section contains the Change Log? (Admin → Change Log)
  2. What roles can access the Change Log? (WebAdmins)
  3. Which interface provides programmatic access to change log entries? (IChangeLogRepository)
  4. What is the difference between Change Log and Version History? (Change Log = site-wide audit; Version History = per-item version restore)
  5. Which Change Log action is recorded when content is published? (Publish)