Logger Logger Logger Logger Class

定義

派生フォームでオーバーライドされると、MSBuild エンジンで発生するイベントを処理するロガーに機能を提供します。When overridden in a derived form, provides functionality for loggers that handle events raised by the MSBuild engine.

public ref class Logger abstract : Microsoft::Build::Framework::ILogger
public abstract class Logger : Microsoft.Build.Framework.ILogger
type Logger = class
    interface ILogger
Public MustInherit Class Logger
Implements ILogger
継承
LoggerLoggerLoggerLogger
実装

次の例は、ビルドイベントに応答する基本的なロガーを記述する方法を示しています。The following example shows how to write a basic logger that responds to build events.

using System;
using System.IO;
using System.Security;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace MyLoggers
{
	// This logger will derive from the Microsoft.Build.Utilities.Logger class,
	// which provides it with getters and setters for Verbosity and Parameters,
	// and a default empty Shutdown() implementation.
	public class BasicFileLogger : Logger
	{
		/// <summary>
		/// Initialize is guaranteed to be called by MSBuild at the start of the build
		/// before any events are raised.
		/// </summary>
		public override void Initialize(IEventSource eventSource)
		{
			// The name of the log file should be passed as the first item in the
			// "parameters" specification in the /logger switch.  It is required
			// to pass a log file to this logger. Other loggers may have zero or more than 
			// one parameters.
			if (null == Parameters)
			{
				throw new LoggerException("Log file was not set.");
			}
			string[] parameters = Parameters.Split(';');
			
			string logFile = parameters[0];
			if (String.IsNullOrEmpty(logFile))
			{
				throw new LoggerException("Log file was not set.");
			}
			
			if (parameters.Length > 1)
			{
				throw new LoggerException("Too many parameters passed.");
			}
			
			try
			{
				// Open the file
				this.streamWriter = new StreamWriter(logFile);
			}
			catch (Exception ex)
			{
				if
				(
					ex is UnauthorizedAccessException
					|| ex is ArgumentNullException
					|| ex is PathTooLongException
					|| ex is DirectoryNotFoundException
					|| ex is NotSupportedException
					|| ex is ArgumentException
					|| ex is SecurityException
					|| ex is IOException
				)
				{
					throw new LoggerException("Failed to create log file: " + ex.Message);
				}
				else
				{
					// Unexpected failure
					throw;
				}
			}

			// For brevity, we'll only register for certain event types. Loggers can also
			// register to handle TargetStarted/Finished and other events.
			eventSource.ProjectStarted += new ProjectStartedEventHandler(eventSource_ProjectStarted);
			eventSource.TaskStarted += new TaskStartedEventHandler(eventSource_TaskStarted);
			eventSource.MessageRaised += new BuildMessageEventHandler(eventSource_MessageRaised);
			eventSource.WarningRaised += new BuildWarningEventHandler(eventSource_WarningRaised);
			eventSource.ErrorRaised += new BuildErrorEventHandler(eventSource_ErrorRaised);
			eventSource.ProjectFinished += new ProjectFinishedEventHandler(eventSource_ProjectFinished);
		}

		void eventSource_ErrorRaised(object sender, BuildErrorEventArgs e)
		{
			// BuildErrorEventArgs adds LineNumber, ColumnNumber, File, amongst other parameters
			string line = String.Format(": ERROR {0}({1},{2}): ", e.File, e.LineNumber, e.ColumnNumber);
			WriteLineWithSenderAndMessage(line, e);
		}
		
		void eventSource_WarningRaised(object sender, BuildWarningEventArgs e)
		{
			// BuildWarningEventArgs adds LineNumber, ColumnNumber, File, amongst other parameters
			string line = String.Format(": Warning {0}({1},{2}): ", e.File, e.LineNumber, e.ColumnNumber);
			WriteLineWithSenderAndMessage(line, e);
		}

		void eventSource_MessageRaised(object sender, BuildMessageEventArgs e)
		{
			// BuildMessageEventArgs adds Importance to BuildEventArgs
			// Let's take account of the verbosity setting we've been passed in deciding whether to log the message
			if ((e.Importance == MessageImportance.High && IsVerbosityAtLeast(LoggerVerbosity.Minimal))
				|| (e.Importance == MessageImportance.Normal && IsVerbosityAtLeast(LoggerVerbosity.Normal))
				|| (e.Importance == MessageImportance.Low && IsVerbosityAtLeast(LoggerVerbosity.Detailed))				
				)
			{
				WriteLineWithSenderAndMessage(String.Empty, e);
			}
		}

		void eventSource_TaskStarted(object sender, TaskStartedEventArgs e)
		{
			// TaskStartedEventArgs adds ProjectFile, TaskFile, TaskName
			// To keep this log clean, this logger will ignore these events.
		}
		
		void eventSource_ProjectStarted(object sender, ProjectStartedEventArgs e)
		{
			// ProjectStartedEventArgs adds ProjectFile, TargetNames
			// Just the regular message string is good enough here, so just display that.
			WriteLine(String.Empty, e);
			indent++;
		}

		void eventSource_ProjectFinished(object sender, ProjectFinishedEventArgs e)
		{
			// The regular message string is good enough here too.
			indent--;
			WriteLine(String.Empty, e);
		}
		
		/// <summary>
		/// Write a line to the log, adding the SenderName and Message
		/// (these parameters are on all MSBuild event argument objects)
		/// </summary>
		private void WriteLineWithSenderAndMessage(string line, BuildEventArgs e)
		{
			if (0 == String.Compare(e.SenderName, "MSBuild", true /*ignore case*/))
			{
				// Well, if the sender name is MSBuild, let's leave it out for prettiness
				WriteLine(line, e);
			}
			else
			{
				WriteLine(e.SenderName + ": " + line, e);
			}
		}
		
		/// <summary>
		/// Just write a line to the log
		/// </summary>
		private void WriteLine(string line, BuildEventArgs e)
		{
			for (int i = indent; i > 0; i--)
			{
				streamWriter.Write("\t");
			}
			streamWriter.WriteLine(line + e.Message);
		}
		
		/// <summary>
		/// Shutdown() is guaranteed to be called by MSBuild at the end of the build, after all 
		/// events have been raised.
		/// </summary>
		public override void Shutdown()
		{
			// Done logging, let go of the file
			streamWriter.Close();
		}

		private StreamWriter streamWriter;
		private int indent;
	}
}

注釈

この抽象クラスは、 ILoggerインターフェイスのメソッドおよびプロパティの既定の実装を提供します。This abstract class provides default implementations for the methods and properties of the ILogger interface.

このクラスは、派生フォームでのみインスタンス化できます。This class can only be instantiated in a derived form.

コンストラクター

Logger() Logger() Logger() Logger()

Logger クラスの新しいインスタンスを初期化します。Initializes a new instance of the Logger class.

プロパティ

Parameters Parameters Parameters Parameters

logger のユーザー定義パラメーターを取得または設定します。Gets or sets the user-defined parameters of the logger.

Verbosity Verbosity Verbosity Verbosity

イベント ログに表示される詳細レベルを取得または設定します。Gets or sets the level of detail to show in the event log.

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
FormatErrorEvent(BuildErrorEventArgs) FormatErrorEvent(BuildErrorEventArgs) FormatErrorEvent(BuildErrorEventArgs) FormatErrorEvent(BuildErrorEventArgs)

BuildErrorEventArgs オブジェクトからエラー メッセージを既定の書式で生成します。Generates an error message that is in the default format, from a BuildErrorEventArgs object.

FormatWarningEvent(BuildWarningEventArgs) FormatWarningEvent(BuildWarningEventArgs) FormatWarningEvent(BuildWarningEventArgs) FormatWarningEvent(BuildWarningEventArgs)

BuildWarningEventArgs オブジェクトから警告メッセージを既定の書式で生成します。Generates a warning message that is in the default format, from a BuildWarningEventArgs object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
Initialize(IEventSource) Initialize(IEventSource) Initialize(IEventSource) Initialize(IEventSource)

派生クラスでオーバーライドされている場合は、特定のイベントにロガーをサブスクライブします。When overridden in a derived class, subscribes the logger to specific events.

IsVerbosityAtLeast(LoggerVerbosity) IsVerbosityAtLeast(LoggerVerbosity) IsVerbosityAtLeast(LoggerVerbosity) IsVerbosityAtLeast(LoggerVerbosity)

現在の Verbosity 設定が、少なくとも渡された値以上のレベルであるかどうかを確認します。Determines whether the current Verbosity setting is at least the value that is passed in.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
Shutdown() Shutdown() Shutdown() Shutdown()

派生クラスでオーバーライドされた場合、初期化時またはビルド時にロガーに割り当てられたリソースを解放します。When overridden in a derived class, releases the resources allocated to the logger at the time of initialization or during the build.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象