Skip to content

Commit

Permalink
Perform all iOS logging through ASL (flutter#3481)
Browse files Browse the repository at this point in the history
* Perform all iOS logging through ASL

As of iOS 10, ASL is deprecated and replaced with os_log. ASL calls
continue to result in logging but as of iOS 10.3, only ASL_LOG_NOTICE
level and above are logged.

This change partially reverts 2937f06,
adding back stdout and stderr redirection, which resulted in loss of
some direct writes to stdout that were necessary for debugging.

This change replaces the direct use of syslog with ASL on iOS, which
Apple has stated will continue to log on iOS >= 10. This eliminates the
need for the previous fwd-declaration of syslog.
  • Loading branch information
cbracken authored Mar 17, 2017
1 parent 803d0e3 commit 24d9d25
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
7 changes: 2 additions & 5 deletions lib/ui/dart_runtime_hooks.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,7 @@
#endif

#if __APPLE__
extern "C" {
// Cannot import the syslog.h header directly because of macro collision
extern void syslog(int, const char*, ...);
}
#include <asl.h>
#endif

using tonic::LogIfError;
Expand Down Expand Up @@ -157,7 +154,7 @@ void Logger_PrintString(Dart_NativeArguments args) {
__android_log_print(ANDROID_LOG_INFO, tag, "%.*s", (int)length,
chars);
#elif __APPLE__
syslog(1 /* LOG_ALERT */, "%.*s", (int)length, chars);
asl_log_message(ASL_LEVEL_NOTICE, "%.*s", (int)length, chars);
#endif
}
if (dart::bin::ShouldCaptureStdout()) {
Expand Down
5 changes: 5 additions & 0 deletions shell/common/switches.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@ DEF_SWITCH(NonInteractive,
"non-interactive",
"Make the shell non-interactive. By default, the shell attempts "
"to setup a window and create an OpenGL context.")
DEF_SWITCH(NoRedirectToSyslog,
"no-redirect-to-syslog",
"On iOS: Don't redirect stdout and stderr to syslog by default. "
"This is used by the tools to read device logs. However, this can "
"cause logs to not show up when launched from Xcode.")
DEF_SWITCH(Packages, "packages", "Specify the path to the packages.")
DEF_SWITCH(StartPaused,
"start-paused",
Expand Down
16 changes: 16 additions & 0 deletions shell/platform/darwin/common/platform_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,20 @@ static void InitializeLogging() {
false); // Tick count
}

static void RedirectIOConnectionsToSyslog() {
#if TARGET_OS_IPHONE
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
FlagForSwitch(Switch::NoRedirectToSyslog))) {
return;
}

asl_log_descriptor(NULL, NULL, ASL_LEVEL_NOTICE, STDOUT_FILENO,
ASL_LOG_DESCRIPTOR_WRITE);
asl_log_descriptor(NULL, NULL, ASL_LEVEL_WARNING, STDERR_FILENO,
ASL_LOG_DESCRIPTOR_WRITE);
#endif
}

static void InitializeCommandLine() {
base::mac::ScopedNSAutoreleasePool pool;
base::CommandLine::StringVector vector;
Expand Down Expand Up @@ -63,6 +77,8 @@ static void InitializeCommandLine() {

InitializeCommandLine();

RedirectIOConnectionsToSyslog();

InitializeLogging();

base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess();
Expand Down

0 comments on commit 24d9d25

Please sign in to comment.