2011-08-21 3 views
3

내 iPhone 응용 프로그램에서 두 개의 로그 파일을 만들고 싶습니다. freopen()을 사용하여 NSLog 출력을 파일로 리디렉션하면 모든 로그 문이 언급 된 하나의 파일로 이동합니다.
하지만 몇 가지 로그 문을 하나의 파일에 넣고 다른 문은 다른 파일에 넣기를 원합니다.

어떤 생각, 어떻게 할 수 있습니까?iPhone 응용 프로그램에서 다중 로그 파일 만들기

답변

2

가장 좋은 방법은 자신의 로거 클래스를 NSLog() 대신 사용하는 대체 드롭으로 작성하는 것입니다. 그렇게하면 런타임에 로그를 어떤 파일에 기록해야하는지 쉽게 판단 할 수 있습니다. 사용자 정의 클래스는 NLog()를 사용하여 동시에 콘솔에 쓸 수 있습니다. freopen()은 단순히 모든 로그 출력을 리디렉션하기 때문에 이것은 최적의 접근 방법처럼 보입니다. 나무꾼 프레임 워크와

+0

그것이 제가 생각한 것입니다. 그러나 저는 그것을 위해 할 수있는 프레임 워크를 찾고 있었고 커스텀 로거를 작성할 시간을 절약 할 수 있습니다. 제안에 대한 고맙습니다. – Anshul

14

시작 : https://github.com/robbiehanson/CocoaLumberjack

내가 다른 파일에 일부 동안 하나 개의 파일에 일부 로그 문을 넣을은

이를 달성하기 위해 몇 가지 방법이 있습니다. 2 파일 로거를 추가 : 여기에 하나의 예입니다

fileLoggerA = [[DDFileLogger alloc] init]; 
fileLoggerB = [[DDFileLogger alloc] init]; 

[DDLog addLogger:fileLoggerA]; 
[DDLog addLogger:fileLoggerB]; 

그래서이 시점에서, 모든 로그 문은 모두 fileLogger1 & fileLogger2로 이동 얻을 것이다. 다음으로 우리는 각각의 fileLogger에 "필터"를 추가하여 그들에게 지시되지 않은 로그 명령문을 무시할 것이다.

우리는 2 개의 다른 로깅 매크로를 작성하여이 작업을 수행 할 수 있습니다 : ALOG()를 & 블로그()

fileLoggerA 만 (ALOG에서 문을 로그 기록합니다). fileLoggerB는 BLog()의 로그 명령문 만 작성합니다.

이것을 설정하려면 "로깅 컨텍스트"를 이용할 수 있습니다. 당신은 같은 간단한 할 수있는 :이보다 더 고급 얻을 수 있습니다 분명

#define ALog(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, 1, frmt, ##__VA_ARGS__) 
#define BLog(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, 2, frmt, ##__VA_ARGS__) 

을하지만 (예를 들어, 로그 수준 등에 대한 지원을 추가)주의 할 점은 ALOG 1의 "환경"을 가지고 있으며, 어떻게 BLOG의 "컨텍스트"는 2입니다.

이제 "사용자 정의 포매터/필터"를 만들어야합니다. 물론, 파일 로거에 사용자 정의 포맷터/필터를 추가,

- (NSString *)formatLogMessage:(DDLogMessage *)logMessage 
{ 
    if (logMessage->logContext == theContextIShouldLog) 
     return logMessage->logMsg; 
    else 
     return nil; 
} 

: 그리고 다음은 그 예이다

이 주제에

자세한 정보는 나무꾼의 프로젝트 페이지를 통해 확인할 수 있습니다

[fileLoggerA setLogFormatter:[MyContextFilter filterWith:1]]; 
[fileLoggerB setLogFormatter:[MyContextFilter filterWith:2]]; 
:

https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomContext https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels

+0

지금 이것은 좋은 요리법, 고마워 Robbie :) –

+0

나는 이것을 시도하고 두 파일 로거가 같은 파일에 그들의 출력을 지시하고있는 것 같습니다. 이것은 장치와 시뮬레이터 모두에 있습니다. – thegrinner

+0

저에게 감사드립니다. –

관련 문제