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 comment