talker icon indicating copy to clipboard operation
talker copied to clipboard

intelliJ console log problem in ios

Open adamsocrat opened this issue 1 year ago • 12 comments

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):

  • OS: MacOS Sonoma
  • Browser Chrome

Smartphone (please complete the following information):

  • Device: iPhone 15
  • OS: ios 17
  • Browser Stock

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

adamsocrat avatar Feb 02 '24 10:02 adamsocrat

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(),
  ),
);

XanderD99 avatar Feb 02 '24 13:02 XanderD99

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

adamsocrat avatar Feb 05 '24 10:02 adamsocrat

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

Abricoc avatar Feb 20 '24 20:02 Abricoc

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

WieFel avatar Mar 11 '24 15:03 WieFel

same here

bcihanc avatar Mar 21 '24 20:03 bcihanc

same here

sfcecy7i avatar Apr 28 '24 08:04 sfcecy7i

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.

westito avatar May 06 '24 16:05 westito

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

eladrof avatar May 22 '24 11:05 eladrof

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

westito avatar May 22 '24 11:05 westito

@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

eladrof avatar May 22 '24 11:05 eladrof

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.

westito avatar May 22 '24 12:05 westito

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

eladrof avatar May 22 '24 13:05 eladrof