Как перенаправить определенный вывод NSLog в файл

Я использую код для записи всех NSLogs в текстовый файл. Как я могу выбрать NSlogs, которые мне нужно только записать в файл?

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"MOVbandlog.txt"];
//freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
freopen([logPath fileSystemRepresentation],"a+",stderr);

person TWcode    schedule 27.03.2013    source источник


Ответы (3)


Вы можете создать две версии NSLog, так как MYLog, использующий только NSLog, будет отображаться на консоли. Второй MYLogFile, который также будет вызывать NSLog и записывать в файл.

Итак, в основном вам нужно сделать два макроса или метода.

person Anoop Vaidya    schedule 27.03.2013
comment
Могу ли я получить пример? Вот один из моих NSlog NSLog(@\n*********данные, полученные от устройства********\n%@,[описание данных]); - person TWcode; 27.03.2013
comment
внесите некоторые изменения здесь - person Anoop Vaidya; 27.03.2013
comment
Эта строка не работает: fprintf(myFileDescriptor, %s\n, [formattedMessage UTF8String]); Что-то с myfileDescriptor - person TWcode; 27.03.2013

Возможно, вы захотите взглянуть на Lumberjack, который представляет собой обширную библиотеку ведения журналов.

person fumoboy007    schedule 27.03.2013

Пожалуйста, посмотрите, это может помочь:

Перенаправление вывода nslog в файл полезно в сценариях, когда устройство не подключено к системе, и нам нужны журналы консоли для отслеживания некоторых проблем. Для этого мы добавили один подкласс USTLogger класса singleton класса NSObject:

Исходный код файла USTLogger.h следующий:

#import <Foundation/Foundation.h>

@interface USTLogger : NSObject
{
BOOL stdErrRedirected;
}
@property (nonatomic, assign) BOOL stdErrRedirected;

-(void) writeNSLogToFile;

+ (USTLogger *) sharedInstance;

Исходный код файла USTLogger.m следующий:

#import "USTLogger.h"
#import <unistd.h>

@implementation USTLogger

@synthesize stdErrRedirected;

static int savedStdErr = 0;
static USTLogger *sharedInstance;

+ (USTLogger *) sharedInstance {
static dispatch_once_t once;
static id sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}

-(id)init {
return self;
}

- (void) writeNSLogToFile
{

if (!stdErrRedirected)
{
stdErrRedirected = YES;
savedStdErr = dup(STDERR_FILENO);

NSString *cachesDirectory =  [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)  objectAtIndex:0];
NSString *logPath = [cachesDirectory stringByAppendingPathComponent:@"nslog.log"];
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}
}

- (void)restoreStdErr
{
if (stdErrRedirected)
{
stdErrRedirected = NO;
fflush(stderr);

dup2(savedStdErr, STDERR_FILENO);
close(savedStdErr);
savedStdErr = 0;
}
}

После реализации класса USTLogger нам просто нужно вызвать этот метод, когда нам нужен nslog в файле.

#import "AppDelegate.h"
#import "USTLogger.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

[[USTLogger sharedInstance] writeNSLogToFile];

NSLog(@"didFinishLaunchingWithOptions");

return YES;
}
@end

Это запишет весь вывод nslog в файл и сохранит его в каталоге документов приложения. Мы можем получить этот файл nslog, включив общий доступ к файлам для приложения.

исходный код можно загрузить по ссылке ниже:

https://shankertiwari3.wordpress.com/2015/06/09/redirect-the-nslog-output-to-file-instead-of-console/

person Uma_Shanker_Tiwari    schedule 15.06.2015