Logging Output of Azure Startup Tasks to the Event Log

Posted by Your DisplayName here! on Least Privilege See other posts from Least Privilege or by Your DisplayName here!
Published on Fri, 04 Mar 2011 09:24:44 GMT Indexed on 2011/03/04 15:32 UTC
Read the original article Hit count: 199

Filed under:

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}\n\n{1}", task, outString);

                _eventLog.WriteEntry(outString, EventLogEntryType.Information);

            }

 

            if (!string.IsNullOrWhiteSpace(errString))

            {

                errString = String.Format("Standard Err for {0}\n\n{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.

© Least Privilege or respective owner

Related posts about Azure