@@ -72,61 +72,78 @@ LogMessage::LogMessage(LogSeverity severity,
7272 }
7373}
7474
75+ // static
76+ thread_local std::ostringstream* LogMessage::capture_next_log_stream_ = nullptr ;
77+
78+ void CaptureNextLog (std::ostringstream* stream) {
79+ LogMessage::CaptureNextLog (stream);
80+ }
81+
82+ // static
83+ void LogMessage::CaptureNextLog (std::ostringstream* stream) {
84+ LogMessage::capture_next_log_stream_ = stream;
85+ }
86+
7587LogMessage::~LogMessage () {
7688#if !defined(OS_FUCHSIA)
7789 stream_ << std::endl;
7890#endif
7991
92+ if (capture_next_log_stream_) {
93+ *capture_next_log_stream_ << stream_.str ();
94+ capture_next_log_stream_ = nullptr ;
95+ } else {
8096#if defined(FML_OS_ANDROID)
81- android_LogPriority priority =
82- (severity_ < 0 ) ? ANDROID_LOG_VERBOSE : ANDROID_LOG_UNKNOWN;
83- switch (severity_) {
84- case LOG_INFO:
85- priority = ANDROID_LOG_INFO;
86- break ;
87- case LOG_WARNING:
88- priority = ANDROID_LOG_WARN;
89- break ;
90- case LOG_ERROR:
91- priority = ANDROID_LOG_ERROR;
92- break ;
93- case LOG_FATAL:
94- priority = ANDROID_LOG_FATAL;
95- break ;
96- }
97- __android_log_write (priority, " flutter" , stream_.str ().c_str ());
97+ android_LogPriority priority =
98+ (severity_ < 0 ) ? ANDROID_LOG_VERBOSE : ANDROID_LOG_UNKNOWN;
99+ switch (severity_) {
100+ case LOG_INFO:
101+ priority = ANDROID_LOG_INFO;
102+ break ;
103+ case LOG_WARNING:
104+ priority = ANDROID_LOG_WARN;
105+ break ;
106+ case LOG_ERROR:
107+ priority = ANDROID_LOG_ERROR;
108+ break ;
109+ case LOG_FATAL:
110+ priority = ANDROID_LOG_FATAL;
111+ break ;
112+ }
113+ __android_log_write (priority, " flutter" , stream_.str ().c_str ());
98114#elif defined(FML_OS_IOS)
99- syslog (LOG_ALERT, " %s" , stream_.str ().c_str ());
115+ syslog (LOG_ALERT, " %s" , stream_.str ().c_str ());
100116#elif defined(OS_FUCHSIA)
101- fx_log_severity_t fx_severity;
102- switch (severity_) {
103- case LOG_INFO:
104- fx_severity = FX_LOG_INFO;
105- break ;
106- case LOG_WARNING:
107- fx_severity = FX_LOG_WARNING;
108- break ;
109- case LOG_ERROR:
110- fx_severity = FX_LOG_ERROR;
111- break ;
112- case LOG_FATAL:
113- fx_severity = FX_LOG_FATAL;
114- break ;
115- default :
116- if (severity_ < 0 ) {
117- fx_severity = fx_log_severity_from_verbosity (-severity_);
118- } else {
119- // Unknown severity. Use INFO.
117+ fx_log_severity_t fx_severity;
118+ switch (severity_) {
119+ case LOG_INFO:
120120 fx_severity = FX_LOG_INFO;
121- }
122- }
123- fx_logger_log_with_source (fx_log_get_logger (), fx_severity, nullptr , file_,
124- line_, stream_.str ().c_str ());
121+ break ;
122+ case LOG_WARNING:
123+ fx_severity = FX_LOG_WARNING;
124+ break ;
125+ case LOG_ERROR:
126+ fx_severity = FX_LOG_ERROR;
127+ break ;
128+ case LOG_FATAL:
129+ fx_severity = FX_LOG_FATAL;
130+ break ;
131+ default :
132+ if (severity_ < 0 ) {
133+ fx_severity = fx_log_severity_from_verbosity (-severity_);
134+ } else {
135+ // Unknown severity. Use INFO.
136+ fx_severity = FX_LOG_INFO;
137+ }
138+ }
139+ fx_logger_log_with_source (fx_log_get_logger (), fx_severity, nullptr , file_,
140+ line_, stream_.str ().c_str ());
125141#else
126- // Don't use std::cerr here, because it may not be initialized properly yet.
127- fprintf (stderr, " %s" , stream_.str ().c_str ());
128- fflush (stderr);
142+ // Don't use std::cerr here, because it may not be initialized properly yet.
143+ fprintf (stderr, " %s" , stream_.str ().c_str ());
144+ fflush (stderr);
129145#endif
146+ }
130147
131148 if (severity_ >= LOG_FATAL) {
132149 KillProcess ();
0 commit comments