Question

Quel serait le meilleur moyen d'écrire des instructions de journal dans un fichier ou une base de données dans une application iPhone?

Idéalement, la sortie de NSLog () pourrait être redirigée vers un fichier à l’aide de freopen (), mais j’ai déjà vu plusieurs informations selon lesquelles cela ne fonctionnerait pas. Est-ce que quelqu'un le sait déjà ou a une idée de la meilleure façon de procéder?

Merci!

Était-ce utile?

La solution

J'ai utilisé avec succès freopen (...) sur le téléphone pour rediriger la sortie vers mon propre fichier.

Autres conseils

Si vous souhaitez utiliser Cocoa, NSString et NSData ont des méthodes pour lire / écrire dans un fichier et NSFileManager vous donne des opérations sur les fichiers. Voici un exemple (devrait fonctionner sur iPhone):

NSData *dataToWrite = [[NSString stringWithString:@"String to write"] dataUsingEncoding:NSUTF8StringEncoding];

NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"fileName.txt"];

// Write the file
[dataToWrite writeToFile:path atomically:YES];

// Read the file
NSString *stringFromFile = [[NSString alloc] initWithContentsOfFile:path];  

// Check if file exists
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager fileExistsAtPath:path]; // Returns a BOOL    

// Remove the file
[fileManager removeItemAtPath:path error:NULL];

// Cleanup
[stringFromFile release];
[fileManager release];

Ce code fonctionne très bien pour moi ..

#if TARGET_IPHONE_SIMULATOR == 0
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
    freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
#endif

Vous pouvez ensuite extraire le fichier journal de l’iphone en utilisant la méthode décrite ici http://blog.coriolis.ch/2009/01/09/redirect-nslog-to-a-file-on-the-iphone/# plus-85

Notez que l'utilisation de freopen ARRETERA LA CONSOLE DANS XCODE fonctionnera .. Cependant, pour une raison quelconque, la console que vous pouvez afficher dans l'agenda de xcode fonctionne toujours très bien.

Ce code fonctionne pour moi:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
#if TARGET_IPHONE_SIMULATOR == 0
    freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr);
#endif
}

Envisagez d'utiliser le Cacao Lumberjack . C'est un utilitaire léger mais flexible pour remplacer la fonctionnalité NSLog. À mon avis, il est dans la même classe que Log4J, ce qui permet d'ajouter des appenders personnalisés, etc. Il a un enregistreur SQLite, par exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top