HXH
HXH
May 11, 2010
  4901
(0 votes)

Adding an Additional Layer of Logging to EPiServer Actions

Part of my standard Workflow Implementation is an additional layer of logging that sits in a table outside of the standard EPiServer installation. I’ve found that keeping a record of a few basic EPiServer actions can really help to paint an accurate picture of which editors are doing what.

To log the actions as they are executed, I first created a custom property with the [PagePlugIn] Attribute. I then created a method called Initialize, which adds additional processing capabilities to events exposed through DataFactory.Instance.

The result is something like the following:

    [PagePlugIn]
    public class CustomPageActionControl
    {
        public static void Initialize(int bitflags)
        {
            DataFactory.Instance.SavedPage += LogSaved;
            DataFactory.Instance.PublishedPage += LogPublished;
            DataFactory.Instance.MovingPage += CheckIfDeleting;
        }

private static void LogSaved(object sender, PageEventArgs e)
        {
            LoggingTools.LogVersionStatus(e.Page, "Saved", "Details: Version saved.", EPiServer.Security.PrincipalInfo.Current);
        }

        private static void LogPublished(object sender, PageEventArgs e)
        {
            LoggingTools.LogVersionStatus(e.Page, "Published", "Details: Version published", EPiServer.Security.PrincipalInfo.Current);
        }

        private static void LogReadyToPublish(object sender, PageEventArgs e)
        {
            LoggingTools.LogVersionStatus(e.Page, "Publish Requested", "Details: Version marked as Ready to Publish. ", EPiServer.Security.PrincipalInfo.Current);
        }

}

This could be enhanced to log additional system actions..or be made more flexible so I’m only calling one Log procedure and then have some logic within to determine what the appropriate message should be… but you get the idea.

May 11, 2010

Comments

Please login to comment.
Latest blogs
Integrating Searchspring with Optimizely – Part 1: Architecture & Setup

Integrating Searchspring with Optimizely – Part 1: Architecture & Setup

Wiselin Jaya Jos | Mar 20, 2026 |

CMS 13 Preview 4 — Upgrading from Preview 3

This is the third post in a series where I use the Alloy template as a reference to walk through each CMS 13 preview. The first post covered...

Robert Svallin | Mar 20, 2026

The move to CMS 13: Upgrade Notes for Technical Teams

A technical walkthrough of CMS 13 preview3 and headless work: what is changing, where the risks are, and how an upgrade and what to expect

Hristo Bakalov | Mar 20, 2026 |

Customizing Product Data Sent to Optimizely Product Recommendations in Optimizely Commerce

A practical guide to customizing IEntryAttributeService in Optimizely Commerce so you can override product titles, add custom feed attributes, and...

Wojciech Seweryn | Mar 20, 2026 |