Tüm mesajları Objective-C tasarımında günlüğe kaydetmek için bu CocoaLumberjack çerçevesini kullanıyorum. Şimdi tüm hataları bir dosyaya ve diğer tüm mesajlara başka bir dosyaya kaydetmek istiyorum. Bu bilgiyi filtrelemek için formatlayıcı kullanabileceğimi biliyorum. AppDelegate'de iki adet DDFileLogger örneği oluşturdum, ancak bu iki kaydedici aynı dosyaya yazmaya devam ediyor. Günlüğe kaydetme hedefini belirleyebileceğim bir yol olup olmadığını merak ediyorum, böylece iki kaydedici iki farklı dosyaya yazıyor.CocoaLumberjack FileLogger birden fazla dosyaya günlüğe kaydetme
cevap
Bu çalışmayı gerçekleştirmenin anahtarı, her DDFileLogger'ı kendi DDLogFileManager'ına ve her biri için ayrı bir günlük dizin yolu ile kurmaktır. DDLogFileManager, hangi dosyanın oturum açacağını belirlemek için günlük dizini yolunu kullanır; böylece iki tanesi aynı dizine işaret ediyorsa, aynı günlük dosyasına giriş yapar. Bu nedenle anahtar, her bir günlük için ayrı dizinler kullanmaktır. "Bir" ve "İki": İki farklı günlük türleri için
sonra hala günlüğü yapmak için makro tanımlamak gerekir tabii// 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];
:
#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__)
Bu çalıştı budur benim için.
Ayrıca, varsayılan içeriği 0 kullanarak ve loggerOne kodunu ekleyerek bunu basitleştirebilirsiniz. Daha sonra, bağlam 0 için varsayılan dosya günlüğünüze bir DDContextWhitelistFilterLogFormatter eklemeniz gerekir. – dbainbridge
C99’da SYNC_LOG_OBJC_MACRO örtük beyanına izin verilmiyor. Bu konuda herkes yardımcı olabilir mi? –
Yeni bir özellik (her kayıt cihazı için farklı günlük seviyesi) kullanarak çok yakın bir şey elde edebilirsiniz. Bakınız https://github.com/robbiehanson/CocoaLumberjack/wiki/PerLoggerLogLevels. Hata kütükleri her iki dosyaya da gireceğinden, 2 dosya kaydedicisini (biri hata seviyesine sahip ve diğeri de ayrıntıya sahip olan) tanımladığınız gibi olmaz. Bu yeterince iyi mi?
Ayrıca buna da ihtiyacım var ama önemli olan kayıtların ayrı dosyalara gitmesi. Yani her iki dosyaya girmesi en azından amacımı yener. – dbainbridge
Yukarıda üst cevabı hakkında yorum yapmak yeterli itibar yok, ama burada son CocoaLumberjack ile çalışır KabukiAdam en cevabın bir sürümü:
// 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];
SY99_LOG_OBJC_MACRO'nun örtük beyanına c99'da izin verilmez. Bu konuda herkes yardımcı olabilir mi? –
- 1. Farklı iletilerin iki dosyaya günlüğe kaydedilmesi için günlüğe kaydetme
- 2. mod_wsgi ile günlüğe kaydetme hatalarını günlüğe kaydetme
- 3. Selenium'da günlüğe kaydetme (Python'dan)
- 4. Günlüğe kaydetme ve günlüğe kaydetme gün ışığından yararlanma
- 5. İleti/günlüğe kaydetme İnce
- 6. py.test günlüğe kaydetme denetimi
- 7. Raylar Günlüğe Kaydetme API'si
- 8. Glassfish Günlüğe kaydetme
- 9. Günlüğe kaydetme düzeyini değiştirmemiş
- 10. python günlüğe kaydetme alternatifleri
- 11. SOAP günlüğe kaydetme ekseni2
- 12. C günlüğe kaydetme kitaplıkları
- 13. Flask'ta günlüğe kaydetme basitleştirme
- 14. NoClassDefFoundError clojure araçları ile günlüğe kaydetme
- 15. Tek bir sorguda birden fazla satır kaydetme
- 16. Python dosyaları günlüğe kaydetme ve döndürme
- 17. log4j: pakete özgü günlüğe kaydetme
- 18. Pylint mesajını bir dosyaya kaydetme
- 19. Log4cxx kullanarak günlüğe kaydetme ve filtreleme
- 20. Perl'de çıktı olarak günlüğe kaydetme
- 21. Groovy Komut Dosyası'nda Günlüğe Kaydetme
- 22. RestTemplate günlüğe kaydetme POST verileri
- 23. nginx'de proxy etkinliğini günlüğe kaydetme
- 24. Nodejs winston günlüğe kaydetme kütükleri
- 25. Spdlog ile kütüphaneden günlüğe kaydetme
- 26. ASP.NET MVC'de günlüğe kaydetme hataları
- 27. Python günlüğe kaydetme yapılandırma dosyası
- 28. py.test: hata sayısını günlüğe kaydetme
- 29. Python günlüğe kaydetme özel durumu
- 30. Python günlüğe kaydetme ve günlük dosyasına giriş
Ben aynı sorunu yaşıyorum. [Bu yazı] 'daki yaklaşımı denedim (http://stackoverflow.com/a/7762344/264775), fakat cihazda ya da simülatörde çalışmıyor. Çalışan bir yaklaşım buldunuz mu? – thegrinner
SWIFT 2.2 projesinde Hockey ile Cocoalumberjack'ı entegre etme konusunda adım adım talimatlar aldığım bir belgeye veya bağlantıya sahip olabilir miyiz? Tüm linkler ve hokey uygulamaları web sitesi tüm uygulamaları objektif-c olarak gösterir. Teşekkürler! – Tejas