Logging Output of Azure Startup Tasks to the Event Log

This can come in handy when troubleshooting:

using System;

using System.Diagnostics;

using System.Text;

 

namespace Thinktecture.Azure

{

    class Program

    {

        static EventLog _eventLog = new EventLog(“Application”, “.”, “StartupTaskShell”);

        static StringBuilder _out = new StringBuilder(64);

        static StringBuilder _err = new StringBuilder(64);

 

        static int Main(string[] args)

        {

            if (args.Length != 1)

            {

                Console.WriteLine(“Invalid arguments: “ + String.Join(“, “, args));

                _eventLog.WriteEntry(“Invalid arguments: “ + String.Join(“, “, args));

               

                return -1;

            }

 

            var task = args[0];

 

            ProcessStartInfo info = new ProcessStartInfo()

            {

                FileName = task,

                WorkingDirectory = Environment.CurrentDirectory,

                UseShellExecute = false,

                ErrorDialog = false,

                CreateNoWindow = true,

                RedirectStandardOutput = true,

                RedirectStandardError = true

            };

 

            var process = new Process();

            process.StartInfo = info;

 

            process.OutputDataReceived += (s, e) =>

                {

                    if (e.Data != null)

                    {

                        _out.AppendLine(e.Data);

                    }

                };

            process.ErrorDataReceived += (s, e) =>

                {

                    if (e.Data != null)

                    {

                        _err.AppendLine(e.Data);

                    }

                };

 

            process.Start();

            process.BeginOutputReadLine();

            process.BeginErrorReadLine();

            process.WaitForExit();

 

            var outString = _out.ToString();

            var errString = _err.ToString();

 

            if (!string.IsNullOrWhiteSpace(outString))

            {

                outString = String.Format(“Standard Out for {0}nn{1}”, task, outString);

                _eventLog.WriteEntry(outString, EventLogEntryType.Information);

            }

 

            if (!string.IsNullOrWhiteSpace(errString))

            {

                errString = String.Format(“Standard Err for {0}nn{1}”, task, errString);

                _eventLog.WriteEntry(errString, EventLogEntryType.Error);

            }

 

            return 0;

        }

    }

}

You then wrap your startup tasks with the StartupTaskShell and you’ll be able to see stdout and stderr in the application event log.

This entry was posted in Azure. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s