| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- //
- // CustomJitsiLogger.m
- // AIIM
- //
- // Created by qitewei on 2025/6/6.
- //
- #import "CustomJitsiLogger.h"
- @implementation CustomJitsiLogger{
- BOOL _remoteReportingEnabled;
- BOOL _debugLoggingEnabled;
- }
- + (instancetype)sharedHandler {
- static CustomJitsiLogger *sharedInstance = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- sharedInstance = [[self alloc] init];
- sharedInstance.criticalErrors = [NSMutableArray array];
- });
- return sharedInstance;
- }
- #pragma mark - 配置方法
- - (void)enableRemoteReporting:(BOOL)enabled {
- _remoteReportingEnabled = enabled;
- }
- - (void)enableDebugLogging:(BOOL)enabled {
- _debugLoggingEnabled = enabled;
- }
- #pragma mark - 日志处理方法
- - (void)logVerbose:(NSString *)msg {
- if (_debugLoggingEnabled) {
- NSLog(@"[JitsiMeet][VERBOSE] %@", msg);
- }
- }
- - (void)logDebug:(NSString *)msg {
- if (_debugLoggingEnabled) {
- NSLog(@"[JitsiMeet][DEBUG] %@", msg);
- }
- }
- - (void)logInfo:(NSString *)msg {
- NSLog(@"[JitsiMeet][INFO] %@", msg);
- }
- - (void)logWarn:(NSString *)msg {
- NSLog(@"[JitsiMeet][WARN] %@", msg);
- [self checkPotentialIssues:msg];
- }
- - (void)logError:(NSString *)msg {
- NSLog(@"[JitsiMeet][ERROR] %@", msg);
- self.errorCount++;
-
- // 关键错误处理
- if ([self isCriticalError:msg]) {
- [self.criticalErrors addObject:msg];
- [self handleCriticalError:msg];
- }
-
- // 远程上报
- if (_remoteReportingEnabled) {
- [self reportErrorToAnalytics:msg];
- }
- }
- #pragma mark - 私有方法
- - (BOOL)isCriticalError:(NSString *)error {
- NSArray *criticalKeywords = @[@"disconnect", @"timeout", @"failed", @"exception", @"error"];
- for (NSString *keyword in criticalKeywords) {
- if ([error.lowercaseString containsString:keyword]) {
- return YES;
- }
- }
- return NO;
- }
- - (void)handleCriticalError:(NSString *)error {
- dispatch_async(dispatch_get_main_queue(), ^{
- if ([error containsString:@"Websocket error"]) {
- !self.WebsocketErrorBlock ?:self.WebsocketErrorBlock();
- }
- });
- }
- - (void)reportErrorToAnalytics:(NSString *)error {
- // Firebase Crashlytics 上报
- NSError *reportError = [NSError errorWithDomain:@"JitsiMeetErrorDomain"
- code:-1
- userInfo:@{NSLocalizedDescriptionKey: error}];
-
- }
- - (void)checkPotentialIssues:(NSString *)warning {
- if ([warning containsString:@"bandwidth"]) {
- NSLog(@"[JitsiMeet] 检测到带宽问题警告");
- }
- }
- @end
|