65 votes

Où le fichier journal est-il stocké avec cocoaLumberjack?

J'utilise le cadre de journalisation cocoaLumberjack pour la journalisation iOS. Pour stocker les journaux dans un fichier, j'ai utilisé ce code.

 DDFileLogger* fileLogger = [[DDFileLogger alloc] init];
fileLogger.rollingFrequency = 60 * 60 * 24; 
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;

[DDLog addLogger:fileLogger];

DDLogVerbose(@"hello");
NSLog(@"hihihihihi");
 

Je suis incapable de trouver où exactement le fichier journal généré par ce code est stocké. Quelqu'un peut-il m'aider avec ce problème ?

75voto

Daniel Points 130

Si vous voulez obtenir les fichiers journaux que vous avez créé lors de l'exécution sur le périphérique,

  1. Aller à l'Organisateur dans Xcode
  2. Aller à l'onglet Périphériques
  3. En vertu de périphériques, développez l'appareil que vous avez créé sur les journaux.
  4. Allez à Applications
  5. Cliquez sur l'application dans laquelle vous avez exécuté CocoaLumberjack DDLog consolidés.
  6. Cliquez sur le bouton de Téléchargement en bas et de l'enregistrer.
  7. Dans le finder, faites un clic droit (menu) sur le sauvé .xcappdata fichier et sélectionnez Afficher le Contenu du Paquet
  8. Les fichiers journaux sont enregistrés dans /AppData/Library/Caches/Logs/

65voto

Kyle Robson Points 606

Les réponses données ici ne semblent pas tenir compte du fait qu'il peut y avoir plusieurs fichiers journaux. Vous pouvez utiliser votre DDFileLogger de l'instance logFileManager propriété pour parcourir les informations du fichier. Découvrez DDFileLogger.h pour le public, de méthodes et de propriétés. Les éléments suivants peuvent être utiles:

- (NSString *)logsDirectory;

- (NSArray *)unsortedLogFilePaths;
- (NSArray *)unsortedLogFileNames;
- (NSArray *)unsortedLogFileInfos;

- (NSArray *)sortedLogFilePaths;
- (NSArray *)sortedLogFileNames;
- (NSArray *)sortedLogFileInfos;

Voici ma solution pour obtenir des données de journal (et en l'envoyant par courrier électronique). Notez que par défaut, le nombre de fichiers journaux est de 5 de cette écriture.

- (NSMutableArray *)errorLogData
{
    NSUInteger maximumLogFilesToReturn = MIN([KRLogManager sharedInstance].fileLogger.logFileManager.maximumNumberOfLogFiles, 10);
    NSMutableArray *errorLogFiles = [NSMutableArray arrayWithCapacity:maximumLogFilesToReturn];
    DDFileLogger *logger = [KRLogManager sharedInstance].fileLogger;
    NSArray *sortedLogFileInfos = [logger.logFileManager sortedLogFileInfos];
    for (int i = 0; i < MIN(sortedLogFileInfos.count, maximumLogFilesToReturn); i++) {
        DDLogFileInfo *logFileInfo = [sortedLogFileInfos objectAtIndex:i];
        NSData *fileData = [NSData dataWithContentsOfFile:logFileInfo.filePath];
        [errorLogFiles addObject:fileData];
    }
    return errorLogFiles;
}

- (void)composeEmailWithDebugAttachment
{
    if ([MFMailComposeViewController canSendMail]) {

        MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
        mailViewController.mailComposeDelegate = self;
        NSMutableData *errorLogData = [NSMutableData data];
        for (NSData *errorLogFileData in [self errorLogData]) {
            [errorLogData appendData:errorLogFileData];
        }
        [mailViewController addAttachmentData:errorLogData mimeType:@"text/plain" fileName:@"errorLog.txt"];
        [mailViewController setSubject:NSLocalizedString(@"Good Subject", @"");];
        [mailViewController setToRecipients:[NSArray arrayWithObject:@"some@email.com"]];

        [self presentModalViewController:mailViewController animated:YES];

    }

    else {
        NSString *message = NSLocalizedString(@"Sorry, your issue can't be reported right now. This is most likely because no mail accounts are set up on your mobile device.", @"");
        [[[UIAlertView alloc] initWithTitle:nil message:message delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles: nil] show];
    }
}

33voto

kenichi Points 332

Si vous utilisez CocoaLumberjack, vous avez DDFileLogger.h et vous pouvez exposer la méthode currentLogFileInfo: déjà implémentée:

 @interface DDFileLogger : DDAbstractLogger <DDLogger>
...
- (DDLogFileInfo *)currentLogFileInfo;
@end
 

Ensuite, vous pouvez accéder par programmation au chemin du fichier actuel avec:

 // configure logger
DDFileLogger *fileLogger = [DDFileLogger new];
[DDLog addLogger:fileLogger];
[DDLog addLogger:[DDTTYLogger sharedInstance]];
DDLogInfo(@"log file at: %@", [[fileLogger currentLogFileInfo] filePath]);
 

Qui, sur mon iPhone, a imprimé:

 log file at: /var/mobile/Applications/3BE1219F-78BE-491C-B68C-74D6FA0C2EF1/Library/Caches/Logs/log-5D1286.txt
 

à la fois la console et le fichier.

17voto

jpalten Points 373

Vous pouvez contrôler où il est stocké. Par exemple, je le stocke parfois dans le dossier iTunes pour le récupérer facilement. Utilisez ceci dans AppDelegate lors de la configuration de fileLogger:

 NSString * applicationDocumentsDirectory = [[[[NSFileManager defaultManager]    
     URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] path];
DDLogFileManagerDefault *documentsFileManager = [[DDLogFileManagerDefault alloc]
     initWithLogsDirectory:applicationDocumentsDirectory];
DDFileLogger *fileLogger = [[DDFileLogger alloc]
     initWithLogFileManager:documentsFileManager];
 

7voto

abhiasawa Points 552

J'ai la réponse

Il est stocké dans Library / Appication Support / Iphone Simulator / # version no # / applications / # votre application # / documents / logs / log-3hex no>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X