LoggerVerbosity LoggerVerbosity LoggerVerbosity LoggerVerbosity Enum

Definition

Gibt die verfügbaren Ausführlichkeitsgrade eines Logger an.Specifies the available verbosity levels of a Logger.

public enum class LoggerVerbosity
[System.Runtime.InteropServices.ComVisible(true)]
public enum LoggerVerbosity
type LoggerVerbosity = 
Public Enum LoggerVerbosity
Vererbung
LoggerVerbosityLoggerVerbosityLoggerVerbosityLoggerVerbosity
Attribute

Felder

Detailed Detailed Detailed Detailed 3

Hohe Ausführlichkeit, bei der Fehler, Warnungen, Meldungen mit MessageImportance-Werten von High oder Normal, sämtliche Statusereignisse und eine Buildzusammenfassung angezeigt werden.Detailed verbosity, which displays errors, warnings, messages with MessageImportance values of High or Normal, all status events, and a build summary.

Diagnostic Diagnostic Diagnostic Diagnostic 4

Diagnostische Ausführlichkeit, bei der sämtliche Fehler, Warnungen, Meldungen und Statusereignisse sowie eine Buildzusammenfassung angezeigt werden.Diagnostic verbosity, which displays all errors, warnings, messages, status events, and a build summary.

Minimal Minimal Minimal Minimal 1

Minimale Ausführlichkeit, bei der Fehler, Warnungen, Meldungen mit MessageImportance-Werten von High und eine Buildzusammenfassung angezeigt werden.Minimal verbosity, which displays errors, warnings, messages with MessageImportance values of High, and a build summary.

Normal Normal Normal Normal 2

Normale Ausführlichkeit, bei der Fehler, Warnungen, Meldungen mit MessageImportance-Werten von High, einige Statusereignisse und eine Buildzusammenfassung angezeigt werden.Normal verbosity, which displays errors, warnings, messages with MessageImportance values of High, some status events, and a build summary.

Quiet Quiet Quiet Quiet 0

Stille Ausführlichkeit, bei der eine Buildzusammenfassung angezeigt wird.Quiet verbosity, which displays a build summary.

Beispiele

Im folgenden Beispiel wird gezeigt, wie Sie eine grundlegende Protokollierung schreiben, die auf Buildereignisse antwortet.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;
	}
}

Hinweise

Die Beschreibungen der ausführlichkeits Grade sind nur Richtlinien für das Protokollieren von Buildereignissen durch eine typische Protokollierung (einschließlich der Standard MSBuildMSBuild mäßigen Konsolen Protokollierung).The descriptions of verbosity levels are only guidelines to how a typical logger (including the default MSBuildMSBuild console logger) logs build events. Protokollierungen können ausführlichkeits Grade beliebig interpretieren.Loggers are free to interpret verbosity levels in any way they want.

Gilt für: