Frezyx / talker

☎️ Advanced error handler and logger for dart and flutter apps
https://pub.dev/packages/talker
MIT License
477 stars 57 forks source link

intelliJ console log problem in ios #179

Open adamsocrat opened 7 months ago

adamsocrat commented 7 months ago

Describe the bug When debugging ios application the output to console always like this. Android is colored and looks usual.

To Reproduce Intellij 2022 and later debug the application in ios

Expected behavior Colored and formatted logs should be seeble.

Screenshots image

Desktop (please complete the following information):

Smartphone (please complete the following information):

The image is from flutter_dio_logger but it is excatly the same case with .info, .warning and error states.

Regarding #104, yes I initialize like this

import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init();

before using initialization method it was the same characters like <..> in #104 after init, its like this.

  talker: ^4.0.0
  talker_flutter: ^4.0.0
  talker_dio_logger: ^4.0.0

Flutter: 3.16.9
Dart: 3.2.6

Flutter intellij Plugin: 77.2.2
Dart intellij plugin: 232.10286
XanderD99 commented 7 months ago

Not necessarily an answer to your issue but under the hood talker uses log for iOS and mac and debugPrint for anything other then web, perhaps this is why it is not shown the way you expect in inteliJ.

So maybe pass a custom logger to your init function.

// 🎯 Dart imports:
import 'dart:developer';

// 🐦 Flutter imports:
import 'package:flutter/foundation.dart';

// 📦 Package imports:
import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init(
  logger: TalkerLogger(
    output: debugPrint, // or log
    settings: TalkerLoggerSettings(),
  ),
);
adamsocrat commented 7 months ago

@XanderD99 thx. But both solution gives the same result, suprisingly.

Abricoc commented 6 months ago

I have same problem. if you find solution please write his.

WieFel commented 5 months ago

I am having the same problem. Also after initialising using TalkerFlutter.init()

bcihanc commented 5 months ago

same here

sfcecy7i commented 4 months ago

same here

westito commented 4 months ago

Not necessarily an answer to your issue but under the hood talker uses log for iOS and mac and debugPrint for anything other then web, perhaps this is why it is not shown the way you expect in inteliJ.

So maybe pass a custom logger to your init function.

// 🎯 Dart imports:
import 'dart:developer';

// 🐦 Flutter imports:
import 'package:flutter/foundation.dart';

// 📦 Package imports:
import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init(
  logger: TalkerLogger(
    output: debugPrint, // or log
    settings: TalkerLoggerSettings(),
  ),
);

It is not helps because TalkerFlutter overwrites the output setting.

The solution: Simply do not use TalkerFlutter! It doesn't do anything except that pipes output to log() instead of debugPrint() that actually causes the problem! I think it was a solution for a problem in the past, but this factory went obsolete I think.

eladrof commented 3 months ago

Not necessarily an answer to your issue but under the hood talker uses log for iOS and mac and debugPrint for anything other then web, perhaps this is why it is not shown the way you expect in inteliJ. So maybe pass a custom logger to your init function.

// 🎯 Dart imports:
import 'dart:developer';

// 🐦 Flutter imports:
import 'package:flutter/foundation.dart';

// 📦 Package imports:
import 'package:talker_flutter/talker_flutter.dart';

final talker = TalkerFlutter.init(
  logger: TalkerLogger(
    output: debugPrint, // or log
    settings: TalkerLoggerSettings(),
  ),
);

It is not helps because TalkerFlutter overwrites the output setting.

The solution: Simply do not use TalkerFlutter! It doesn't do anything except that pipes output to log() instead of debugPrint() that actually causes the problem! I think it was a solution for a problem in the past, but this factory went obsolete I think.

Unfortunately this doesn't work either Tested on Android Studio Jellyfish | 2023.3.1 Patch 1

westito commented 3 months ago

Yes, that's I wrote.

Solution is simply omit TalkerFlutter.init():

// Default settings:
final talker = Talker();

// OR: add custom settings
final talker = Talker(
  logger: TalkerLogger(
    settings: TalkerLoggerSettings(),
  ),
);

Details: https://github.com/Frezyx/talker/issues/229

eladrof commented 3 months ago

@westito thanks for the fast response! The solution you suggest improves the line format a little but still leaves these artifacts \^[[38;5;4m which I assume are related to console color codes

image
westito commented 3 months ago

You sure! Sorry, my bad. I tried with macOS only. As you see, on macOS it is working (TalkerFlutter.init() uses log() instead of debugPrint()). But yes, on iOS it is not working.

Képernyőfotó 2024-05-22 - 14 32 07

Also, the log() call is not visible with run command.

Képernyőfotó 2024-05-22 - 14 35 54

However, on web console the colors are visible (both on iOS and macOS)

Képernyőfotó 2024-05-22 - 14 37 06

So, right now there is no solution I think. iOS escapes special control characters in log likely because security reasons. The intresting part is that log() uses Dart VM Service to print logs so I would think it is not go through iOS filters. But it is possible both logging uses stdout. I don't know how it works under the hood. A possible solution can be completely skip stdout and use Dart VM Service communication channel to send logs.

eladrof commented 3 months ago

@westito thanks again for looking into this! And you are right, it appears to be an old, internal Flutter issue flutter/#64491