Feb4Foto Jan-Hendrik Röhrs

Aus der Praxis – Methodenaufrufe tracen

verfasst von am 4-Feb-10, 11:23:32 - 0 Kommentare
Kategorie: .NET Entwicklung

Immer wieder, sei es nun in einer Code Guideline verlangt oder im konkreten Fall einfach für das Logging sinnvoll, wird es nötig, den Anfang und das Ende von Methoden zu loggen. Meist soll dies mit Hilfe der Trace Klasse geschehen, damit die große Informationsmenge nicht ständig geloggt sondern nur bei Bedarf abgerufen wird.

Der Aufruf von Trace ist hierbei kein Problem, die Klasse befindet sich im Namespace System.Diagnostics:

Trace.WriteLine("Text");

Aber wie formatiert man nun den Methoden Namen und die Parameter? Hier mein Vorschlag:

BEGIN KlassenName.MethodenName (stringParameter = "Wert", boolParameter = true, listItem = {Microsoft.SharePoint.SPListItem})

END KlassenName.MethodenName = "Rückgabewert"

Das ist natürlich die ausführliche Version, man könnte z.B. die Parameternamen weglassen, da diese ja bei der Recherche im Code zu finden sind. Andererseits, wenn ich die Daten selbst nicht sehe, sondern nur mit einem Admin am Telefon spreche, kann es von Vorteil sein, zu sagen “geben Sie mir den Wert von targetFieldName”.

Wie formatieren ich also die Werte so, dass sie in der Art von Visual Studio angezeigt werden?

internal static string FormatValue(object value)
{
    if (value == null)
    {
        return "NULL";
    }
    else
    {
        string s = value.ToString();
        if (value is string)
            return string.Concat("\"", s, "\"");
        else if (s == value.GetType().ToString())
            return string.Concat("{", s, "}");
        else
            return s;
    }
}

Um den gesamten Methodenaufruf zu formatieren, kann dieser Code verwendet werden:

internal static string FormatMethodBegin(string methodName, params object[] inputParams)
{
    string[] para = new string[inputParams.Length / 2];
    for (int i = 0; i < para.Length; i++)
    {
        para[i] = string.Concat(
            inputParams[i * 2] as string,
            " = ",
            FormatValue(inputParams[i * 2 + 1]));
    }
    return string.Concat("BEGIN ", methodName, "(", string.Join(", ", para), ")");
}

Der Aufruf würde dann so aussehen:

TraceMethodBegin("TemplateForm.SaveToLibrary", "library", library, "filename", filename);

Wie bereits erwähnt könnte auch der Parametername jeweils entfallen. In diesem Fall müsste die FormatMethodBegin Methode natürlich entsprechend angepasst werden. Der Vollständigkeit halber hier noch die Formatierung für das Ende der Methode:

internal static string FormatMethodEnd(string methodName)
{
    return string.Concat("END ", methodName, "()");
}

internal static string FormatMethodEnd(string methodName, object returnValue)
{
    return string.Concat(FormatMethodEnd(methodName), " = ", FormatValue(returnValue));
}

[zurück]
 

Es gibt 0 Kommentare zum Thema


    Kommentar abgeben:

    Name:
    URL:
    E-Mail:
    Kommentar:
    Validierung: Bitte geben Sie die sechs Ziffern ein.