LOGen von beliebig vielen Argumenten

written by Martin HĂ€cker on

Fehlt noch ein letzter Schritt - der erstaunlicherweise ganz einfach war und ausserdem noch ein ganz anderes Problem löste...

Zuerst die Implementierung:

#define LOG(what, variableArguments...) \
    [[Log sharedLog] logObjcType:@encode(typeof(what)) \
        arguments:(void *)what , ##variableArguments]

- logObjcType:(char *)typeString arguments:(void *) what, ...; {
    id formatString =  [self stringFromType:typeString inValue:what];

    va_list variadicArguments;
    va_start(variadicArguments, what);

    id logString = [[[NSString alloc] initWithFormat:formatString 
                    arguments:variadicArguments] autorelease];

    va_end(variadicArguments);

    return [self log:logString];
}

Eigentlich hatte ich hier mehr Probleme erwartet.

Ganz nebenbei löst das auch noch ein Problem von ganz zu Anfang:

LOG(@"%@", [NSString stringWithFormat:@"%s,%s", "fnord", "fnord"]);

Das macht jetzt keine Probleme mehr, da die zusÀtzlichen Komas vom PrÀprozessor (fÀlschlicherweise) als zusÀtzliche Argumente zur dem variadischen Makro aufgefasst werden. Hehe...

Jetzt fehlt nur noch ein Backend fĂŒr den Logger und ich bin glĂŒcklich. Andererseits... da gibt es natĂŒrlich auch Log4Cocoa das ich einfach erweitern könnte.

Hm. Mal schauen.