Tôi đang sử dụng khung công tác CocoaLumberjack này để đăng nhập tất cả các thư của tôi trong thiết kế Objective-C. Bây giờ tôi muốn đăng nhập tất cả các lỗi vào một tập tin và tất cả các tin nhắn khác vào một tập tin khác. Tôi biết tôi có thể sử dụng trình định dạng để lọc thông tin này. Tôi đã tạo hai cá thể DDFileLogger trong AppDelegate nhưng hai logger này vẫn tiếp tục ghi vào cùng một tệp. Tôi tự hỏi, nếu có một cách mà tôi có thể chỉ định các điểm đến đăng nhập để hai logger ghi vào hai tập tin khác nhau.CocoaLumberjack FileLogger đăng nhập vào nhiều tệp
Trả lời
Chìa khóa để làm việc này là thiết lập từng DDFileLogger với DDLogFileManager của riêng nó, với các đường dẫn thư mục nhật ký riêng biệt cho mỗi. DDLogFileManager sử dụng đường dẫn thư mục log để xác định tệp cần đăng nhập, vì vậy nếu bạn có hai tệp trỏ đến cùng một thư mục, chúng sẽ đăng nhập vào cùng một tệp nhật ký. Vì vậy, điều quan trọng là sử dụng các thư mục riêng biệt cho mỗi nhật ký.
Đối với hai loại bản ghi khác nhau: "One" và "Hai":
// 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];
thì tất nhiên bạn vẫn cần phải xác định macro để làm đăng nhập của bạn:
#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__)
Đây là những gì làm việc cho tôi.
Bạn cũng có thể đơn giản hóa điều này bằng cách sử dụng ngữ cảnh mặc định 0 và thêm mã loggerOne. Sau đó bạn chỉ cần thêm DDContextWhitelistFilterLogFormatter cho ngữ cảnh 0 vào trình ghi tệp mặc định của bạn. – dbainbridge
Tuyên bố ngầm định của SYNC_LOG_OBJC_MACRO không được phép trong c99. Bất cứ ai có thể giúp đỡ về điều này? –
Bạn có thể đạt được điều gì đó rất gần bằng cách sử dụng tính năng mới (mức nhật ký khác nhau cho mỗi trình ghi nhật ký). Xem https://github.com/robbiehanson/CocoaLumberjack/wiki/PerLoggerLogLevels. Tạo 2 trình ghi nhật ký tệp (một trình có mức lỗi và phần còn lại có chi tiết) sẽ không chính xác như bạn đã mô tả, vì các nhật ký lỗi sẽ đi vào cả hai tệp. Điều này có đủ tốt không?
Tôi cũng cần điều này nhưng điều quan trọng là phải đăng nhập vào các tệp riêng biệt. Vì vậy, có nó đi vào cả hai tập tin đánh bại mục đích của tôi ít nhất. – dbainbridge
tôi không có đủ uy tín để nhận xét về câu trả lời hàng đầu phía trên, nhưng đây là một phiên bản của câu trả lời KabukiAdam rằng làm việc với các CocoaLumberjack mới nhất:
// 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];
Tuyên bố ngầm định của SYNC_LOG_OBJC_MACRO không được phép trong c99. Bất cứ ai có thể giúp đỡ về điều này? –
- 1. Xuất Jersey đăng nhập vào một tệp?
- 2. Đăng nhập vào tệp khác với log4cxx
- 3. Đăng nhập vào một tệp trên Android
- 4. Đăng nhập thiết bị vào tệp
- 5. Đăng nhập nhiều Postgres
- 6. Cách đăng nhập vào nhiều mục tiêu bằng NLog?
- 7. Đăng nhập vào Groovy Script
- 8. Đăng nhập vào PostgreSQL - Đăng nhập thất bại
- 9. java log4j chọn tệp nào cần đăng nhập vào
- 10. Đăng nhập bằng văn bản Android vào tệp
- 11. Hệ thống ghi đè.Diagnostics.Trace.WriteLine để đăng nhập vào một tệp
- 12. CocoaLumberjack và NSLog trong các thư viện khác
- 13. Đang đăng nhập vào busy_job?
- 14. SSO yêu cầu nhiều lần đăng nhập
- 15. Để đăng nhập hoặc không đăng nhập?
- 16. Symfony2 - FOSUserBundle - Nhiều vị trí đăng nhập
- 17. Lỗi đăng nhập vào SQL Server 2008
- 18. Cần tây Đăng nhập vào tập tin
- 19. Nhập nhiều tệp XSD vào danh mục XML của Eclipse
- 20. Nhập tệp CSV vào nhiều mô hình cùng một lúc
- 21. Lỗi khi đăng nhập vào C#
- 22. CocoaLumberjack Lỗi: Biểu tượng không tìm thấy: _objc_storeStrong
- 23. Lấy tên người dùng: mật khẩu từ tệp văn bản, sau đó đăng nhập vào biểu mẫu đăng nhập
- 24. quy tắc htaccess để chuyển tiếp/đăng nhập/và/đăng nhập vào cùng một trang?
- 25. Làm cho PHPStorm luôn đăng nhập vào FTP
- 26. "Đăng nhập" hoặc "Đăng nhập" hoặc "Đăng nhập"
- 27. Cách đăng nhập vào Youtube bằng PHP?
- 28. Đăng nhập vào trang web bằng python
- 29. Logback.xml không đăng nhập vào ConsoleAppender?
- 30. cách đăng nhập vào twitter với curl
Tôi đang gặp vấn đề tương tự. Đã thử cách tiếp cận trong [bài đăng này] (http://stackoverflow.com/a/7762344/264775), nhưng nó không hoạt động trên thiết bị hoặc trình mô phỏng. Bạn có tìm cách tiếp cận làm việc không? – thegrinner
Chúng tôi có thể có một tài liệu hoặc một liên kết mà tôi có được hướng dẫn từng bước về việc tích hợp Cocoalumberjack với Hockey trong dự án SWIFT 2.2. Tất cả các liên kết và trang web ứng dụng hockey cho thấy tất cả việc triển khai trong mục tiêu-c. Cảm ơn! – Tejas