Korzystam z tej struktury CocoaLumberjack do rejestrowania wszystkich moich wiadomości w projekcie Objective-C. Teraz chcę zalogować wszystkie błędy do jednego pliku i wszystkich innych wiadomości do innego pliku. Wiem, że mogę użyć formatera do filtrowania tych informacji. Stworzyłem dwie instancje DDFileLogger w AppDelegate, ale te dwa rejestratory nadal zapisują do tego samego pliku. Zastanawiam się, czy istnieje sposób, żebym mógł określić miejsce docelowe rejestrowania, aby dwa rejestratory zapisywały do dwóch różnych plików.CocoaLumberjack FileLogger logując się do wielu plików
Odpowiedz
Kluczem do uzyskania tego działania jest skonfigurowanie każdego DDFileLoggera za pomocą własnego menedżera DDLogFileManager, z oddzielnymi ścieżkami do katalogów dziennika dla każdego z nich. DDLogFileManager używa ścieżki do katalogu dziennika, aby określić, do którego pliku należy się logować, więc jeśli dwa z nich wskazują ten sam katalog, będą logować się do tego samego pliku dziennika. Dlatego kluczem jest używanie oddzielnych katalogów dla każdego dziennika.
dla dwóch różnych typów dziennika: "One" i "dwa":
// Set the base log directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *baseDir = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSString *logsDirectory = [baseDir stringByAppendingPathComponent:@"Logs"];
// set up file logger One to log to subdirectory "One"
DDLogFileManagerDefault *fileManagerOne = [[DDLogFileManagerDefault alloc] initWithLogsDirectory:[logsDirectory stringByAppendingPathComponent:@"One"]];
DDFileLogger *loggerOne = [[DDFileLogger alloc] fileManagerOne];
// Use the filter formatter to make sure only "One" logs go to the "One" log files
ContextWhitelistFilterLogFormatter *formatterOne = [[ContextWhitelistFilterLogFormatter alloc] init];
[formatterOne addToWhitelist:LOG_CONTEXT_ONE];
[loggerOne formatterOne];
[DDLog loggerOne];
// set up file logger Two to log to subdirectory "Two"
DDLogFileManagerDefault *fileManagerTwo = [[DDLogFileManagerDefault alloc] initWithLogsDirectory:[logsDirectory stringByAppendingPathComponent:@"Two"]];
DDFileLogger *loggerTwo = [[DDFileLogger alloc] fileManagerTwo];
// Use the filter formatter to make sure only "Two" logs go to the "Two" log files
ContextWhitelistFilterLogFormatter *formatterTwo = [[ContextWhitelistFilterLogFormatter alloc] init];
[formatterTwo addToWhitelist:LOG_CONTEXT_TWO];
[loggerTwo formatterTwo];
[DDLog loggerTwo];
wtedy oczywiście trzeba jeszcze zdefiniować makra zrobić swoją rejestrowanie:
#define LOG_CONTEXT_ONE 1
#define LOG_CONTEXT_TWO 2
#define LogOne(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, LOG_CONTEXT_ONE, frmt, ##__VA_ARGS__)
#define LogTwo(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, LOG_CONTEXT_TWO, frmt, ##__VA_ARGS__)
To co pracował dla mnie.
Możesz także uprościć to, używając domyślnego kontekstu 0 i dodając kod LoggerOne. Następnie wystarczy dodać DDContextWhitelistFilterLogFormatter dla kontekstu 0 do domyślnego rejestratora plików. – dbainbridge
Niejawna deklaracja SYNC_LOG_OBJC_MACRO jest niedozwolona w c99. Czy ktoś może pomóc w związku z tym? –
Możesz osiągnąć coś bardzo blisko, używając nowej funkcji (inny poziom dziennika dla każdego rejestratora). Zobacz https://github.com/robbiehanson/CocoaLumberjack/wiki/PerLoggerLogLevels. Tworzenie 2 rejestratorów plików (jeden z poziomem błędu i drugi z pełnym verbose) nie jest dokładnie taki, jak opisałeś, ponieważ dzienniki błędów będą przesyłane do obu plików. Czy to wystarczająco dobre?
Też potrzebuję tego, ale kluczową rzeczą jest to, aby rejestracja przebiegła w oddzielnych plikach. Więc jeśli przejdę do obu plików, przynajmniej pokonam mój cel. – dbainbridge
nie mam wystarczającej reputacji uwag na najwyższym odpowiedzi powyżej, ale tutaj jest to wersja odpowiedzi KabukiAdam, że współpracuje z najnowszymi CocoaLumberjack:
// Set the base log directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *baseDir = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSString *logsDirectory = [baseDir stringByAppendingPathComponent:@"Logs"];
// set up file logger One to log to subdirectory "One"
DDLogFileManagerDefault *fileManagerOne = [[DDLogFileManagerDefault alloc] initWithLogsDirectory:[logsDirectory stringByAppendingPathComponent:@"One"]];
DDFileLogger *loggerOne = [[DDFileLogger alloc] initWithLogFileManager:fileManagerOne];
// Use the filter formatter to make sure only "One" logs go to the "One" log files
ContextWhitelistFilterLogFormatter *formatterOne = [[ContextWhitelistFilterLogFormatter alloc] init];
[formatterOne addToWhitelist:LOG_CONTEXT_ONE];
[loggerOne setLogFormatter:formatterOne];
[DDLog addLogger:loggerOne];
// set up file logger One to log to subdirectory "Two"
DDLogFileManagerDefault *fileManagerTwo = [[DDLogFileManagerDefault alloc] initWithLogsDirectory:[logsDirectory stringByAppendingPathComponent:@"Two"]];
DDFileLogger *loggerTwo = [[DDFileLogger alloc] initWithLogFileManager:fileManagerTwo];
// Use the filter formatter to make sure only "Two" logs go to the "Two" log files ContextWhitelistFilterLogFormatter *formatterTwo = [[ContextWhitelistFilterLogFormatter alloc] init];
[formatterTwo addToWhitelist:LOG_CONTEXT_TWO];
[loggerTwo setLogFormatter:formatterTwo];
[DDLog addLogger:loggerTwo];
Niejawna deklaracja SYNC_LOG_OBJC_MACRO jest niedozwolona w c99. Czy ktoś może pomóc w związku z tym? –
- 1. CocoaLumberjack i NSLog w innych bibliotekach
- 2. Pisząc do wielu plików z Scrapy
- 3. Rury do wielu plików, ale nie stdout
- 4. Najlepsze narzędzie do porównywania plików git dla wielu małych plików
- 5. Narzędzia do łączenia wielu plików xsd
- 6. Przesyłanie wielu plików i używanie czytnika plików do podglądu
- 7. Zapisywanie RDD do wielu plików w PySpark
- 8. ES6: import wielu plików
- 9. Dostęp do wielu plików JSON w JavaScript
- 10. Importowanie wielu plików CSV do wielu arkuszy w jednym skoroszycie
- 11. Usuwanie wielu plików pasujących do wzorca
- 12. Przesyłanie wielu plików do magazynu Azure Blob
- 13. Szyny używające send_file do wysyłania wielu plików
- 14. Importowanie wielu plików .csv do katalogu R
- 15. Uzyskiwanie dostępu do nazw plików formularza przesyłania wielu plików
- 16. Upuszczanie wielu plików do Safari zmienia licznik plików na 0
- 17. Zmienianie uprawnień do plików wielu plików za pośrednictwem terminala Unixowego
- 18. QFileDialog otwieranie wielu plików
- 19. AFNetworking wielu plików upload
- 20. Wymagaj wielu plików
- 21. Przesyłanie wielu plików FTP
- 22. Linux: usuń rozszerzenia plików dla wielu plików
- 23. Wyszukiwanie wielu plików dla wielu słów
- 24. Jak zdefiniować szablon do dodawania wielu plików do projektu?
- 25. Wiosenny rozruch wielu plików dziennika
- 26. Odczytywanie wielu plików z katalogu
- 27. Jak używać log4j 2.0 i slf4j i Commons Logując się razem
- 28. MVC3, przesyłanie wielu plików, modelowanie
- 29. Dołączanie wielu plików w jednym
- 30. Komunikacja wielu plików z coffeescript
Mam ten sam problem. Próbowałem podejście w [ten post] (http://stackoverflow.com/a/7762344/264775), ale nie działa na urządzenie lub symulator. Czy znalazłeś podejście do pracy? – thegrinner
Czy możemy mieć dokumentację lub link, gdzie otrzymuję instrukcje krok po kroku dotyczące integracji Cocoalumberjack z Hockey w projekcie SWIFT 2.2. Wszystkie strony z linkami i strony z aplikacjami hokejowymi pokazują wszystkie implementacje w celu-c. Dzięki! – Tejas