flutter如何自定义logger
在Flutter中如何自定义Logger?我想实现一个能够根据不同的日志级别输出不同颜色和格式的Logger,最好还能支持写入文件。目前使用的是官方logging包,但功能比较基础。有没有推荐的方案或现成的轮子?需要兼顾调试便捷性和生产环境下的日志管理。
        
          2 回复
        
      
      
        在Flutter中自定义Logger,可以通过创建自定义类实现。以下是几种常见方法:
1. 基础自定义Logger类
class CustomLogger {
  static void debug(String message) {
    print('🐛 DEBUG: $message');
  }
  
  static void info(String message) {
    print('ℹ️ INFO: $message');
  }
  
  static void warning(String message) {
    print('⚠️ WARNING: $message');
  }
  
  static void error(String message, [StackTrace? stackTrace]) {
    print('❌ ERROR: $message');
    if (stackTrace != null) {
      print('Stack Trace: $stackTrace');
    }
  }
}
// 使用示例
CustomLogger.debug('这是一个调试信息');
CustomLogger.error('发生错误', StackTrace.current);
2. 使用logger包(推荐)
首先添加依赖:
dependencies:
  logger: ^1.1.0
自定义Logger:
import 'package:logger/logger.dart';
class AppLogger {
  static final Logger _logger = Logger(
    printer: PrettyPrinter(
      methodCount: 0,
      errorMethodCount: 5,
      lineLength: 50,
      colors: true,
      printEmojis: true,
    ),
  );
  static void debug(String message) => _logger.d(message);
  static void info(String message) => _logger.i(message);
  static void warning(String message) => _logger.w(message);
  static void error(String message, [dynamic error, StackTrace? stackTrace]) {
    _logger.e(message, error: error, stackTrace: stackTrace);
  }
}
3. 带日志级别的完整实现
enum LogLevel { debug, info, warning, error }
class AdvancedLogger {
  static LogLevel _currentLevel = LogLevel.debug;
  
  static set level(LogLevel level) => _currentLevel = level;
  
  static void log(LogLevel level, String message, [dynamic error]) {
    if (level.index >= _currentLevel.index) {
      final timestamp = DateTime.now().toIso8601String();
      final levelName = level.toString().split('.').last.toUpperCase();
      
      print('[$timestamp] $levelName: $message');
      if (error != null) {
        print('Error: $error');
      }
    }
  }
  
  static void debug(String message) => log(LogLevel.debug, message);
  static void info(String message) => log(LogLevel.info, message);
  static void warning(String message) => log(LogLevel.warning, message);
  static void error(String message, [dynamic error]) => log(LogLevel.error, message, error);
}
// 设置日志级别
AdvancedLogger.level = LogLevel.info;
使用建议
- 开发环境:使用详细日志(LogLevel.debug)
 - 生产环境:使用较高级别(LogLevel.warning或error)
 - 考虑添加日志文件输出或远程日志服务
 - 使用条件编译控制不同环境的日志行为
 
推荐使用logger包,它提供了丰富的功能和良好的格式化输出。
        
      
            
            
            

