HXH
HXH
May 11, 2010
  4874
(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
Optimizely PaaS + Figma + AI: Auto‑Generate Blocks with Cursor

What if your design handoff wrote itself? In this end‑to‑end demo, I use an AI Agent (inside Cursor) to translate a Figma design into an... The pos...

Naveed Ul-Haq | Feb 5, 2026 |

Graph access with only JS and Fetch

Postman is a popular tool for testing APIs. However, when testing an API like Optimizely Graph that I will be consuming in the front-end I prefer t...

Daniel Halse | Feb 4, 2026

Best Practices for Implementing Optimizely SaaS CMS: A Collective Wisdom Guide

This guide compiles collective insights and recommendations from Optimizely experts for implementing Optimizely SaaS CMS, focusing on achieving...

David Knipe | Feb 4, 2026 |

A day in the life of an Optimizely OMVP: Learning Optimizely Just Got Easier: Introducing the Optimizely Learning Centre

On the back of my last post about the Opti Graph Learning Centre, I am now happy to announce a revamped interactive learning platform that makes...

Graham Carr | Jan 31, 2026