Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Unified Diff: talk/app/webrtc/objc/RTCFileLogger.mm

Issue 1217473011: AppRTCDemo file logging. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/app/webrtc/objc/RTCFileLogger.mm
diff --git a/talk/app/webrtc/objc/RTCFileLogger.mm b/talk/app/webrtc/objc/RTCFileLogger.mm
new file mode 100644
index 0000000000000000000000000000000000000000..05e77da72ef6f16bbf7147ac8165515b616afb37
--- /dev/null
+++ b/talk/app/webrtc/objc/RTCFileLogger.mm
@@ -0,0 +1,132 @@
+/*
+ * libjingle
+ * Copyright 2015 Google Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "RTCFileLogger.h"
+
+#include "webrtc/base/checks.h"
+#include "webrtc/base/logging.h"
+#include "webrtc/base/scoped_ptr.h"
+#include "webrtc/base/stream.h"
+
+NSString *const kDefaultLogFileName = @"webrtc.log";
+NSUInteger const kDefaultMaxFileSize = 10 * 1024 * 1024; // 10MB.
+
+namespace rtc {
+
+class StreamLogSink : public LogSink {
+ public:
+ // Creates a log sink that writes to the given stream. This log sink takes ownership of |stream|.
+ StreamLogSink(StreamInterface *stream) {
+ DCHECK(stream);
+ _stream.reset(stream);
+ }
+
+ ~StreamLogSink() override {}
+
+ void OnLogMessage(const std::string &message) override {
+ if (_stream) {
+ _stream->WriteAll(message.data(), message.size(), nullptr, nullptr);
+ }
+ }
+
+ private:
+ scoped_ptr<StreamInterface> _stream;
+};
+
+} // namespace rtc
+
+@implementation RTCFileLogger {
+ NSString *_filePath;
+ NSUInteger _maxFileSize;
+ rtc::scoped_ptr<rtc::StreamLogSink> _logSink;
+}
+
+- (instancetype)init {
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+ NSString *documentsDirPath = [paths firstObject];
+ NSString *defaultFilePath = [documentsDirPath stringByAppendingPathComponent:kDefaultLogFileName];
jiayl2 2015/07/06 18:18:14 Is this file private to the application? We should
tkchin 2015/07/06 20:36:49 Yes, it's private to the app bundle. Applications
+ return [self initWithFilePath:defaultFilePath maxFileSize:kDefaultMaxFileSize];
+}
+
+- (instancetype)initWithFilePath:(NSString *)filePath maxFileSize:(NSUInteger)maxFileSize {
+ NSParameterAssert(filePath.length);
+ NSParameterAssert(maxFileSize);
+ if (self = [super init]) {
+ _filePath = filePath;
+ _maxFileSize = maxFileSize;
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [self stop];
+}
+
+- (void)start {
+ if (_logSink) {
+ return;
+ }
+ rtc::scoped_ptr<rtc::CircularFileStream> stream;
+ stream.reset(new rtc::CircularFileStream(kDefaultMaxFileSize));
+ if (!stream->Open([_filePath UTF8String], "wb", nullptr)) {
+ LOG(LS_ERROR) << "Failed to open log file at path: " << [_filePath UTF8String];
+ return;
+ }
+ _logSink.reset(new rtc::StreamLogSink(stream.release()));
+
+ rtc::LogMessage::LogThreads(true);
+ rtc::LogMessage::LogTimestamps(true);
+ rtc::LogMessage::AddLogToStream(_logSink.get(), rtc::LS_INFO);
jiayl2 2015/07/06 18:18:14 FYI we'll need a switch to turn on verbose logging
tkchin 2015/07/06 20:36:50 What logs do we get in verbose?
jiayl2 2015/07/06 20:57:56 Verbose webrtc logs contain detailed information a
tkchin_webrtc 2015/07/07 23:30:10 Ok. Making that the default then if it contains us
jiayl2 2015/07/08 16:32:12 We should default to "info". Verbose is too noisy
tkchin_webrtc 2015/07/08 18:18:23 Done.
+}
+
+- (void)stop {
+ if (!_logSink) {
+ return;
+ }
+ rtc::LogMessage::RemoveLogToStream(_logSink.get());
+ _logSink.reset();
+}
+
+- (NSString *)log {
+ return [[self class] contentsOfFileAtPath:_filePath];
+}
+
+#pragma mark - Private
+
++ (NSString *)contentsOfFileAtPath:(NSString *)path {
+ NSError *error = nil;
+ NSString *contents =
+ [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
+ if (error) {
+ LOG(LS_ERROR) << "Failed to read contents of file at path: " << [path UTF8String]
+ << " Error: " << [error.localizedDescription UTF8String];
+ return nil;
+ }
+ return contents;
+}
+
+@end
« no previous file with comments | « no previous file | talk/app/webrtc/objc/public/RTCFileLogger.h » ('j') | talk/examples/objc/AppRTCDemo/common/ARDLogging.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698