// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_BASE_NET_LOG_LOGGER_H_ #define NET_BASE_NET_LOG_LOGGER_H_ #include #include "base/files/scoped_file.h" #include "base/macros.h" #include "net/base/net_log.h" namespace base { class DictionaryValue; class FilePath; class Value; } namespace net { // NetLogLogger watches the NetLog event stream, and sends all entries to // a file specified on creation. // // The text file will contain a single JSON object. class NET_EXPORT NetLogLogger : public NetLog::ThreadSafeObserver { public: // Takes ownership of |file| and will write network events to it once logging // starts. |file| must be non-NULL handle and be open for writing. // |constants| is a legend for decoding constant values used in the log. NetLogLogger(FILE* file, const base::Value& constants); ~NetLogLogger() override; // Sets the log level to log at. Must be called before StartObserving. void set_log_level(NetLog::LogLevel log_level); // Starts observing specified NetLog. Must not already be watching a NetLog. // Separate from constructor to enforce thread safety. void StartObserving(NetLog* net_log); // Stops observing net_log(). Must already be watching. void StopObserving(); // net::NetLog::ThreadSafeObserver implementation: void OnAddEntry(const NetLog::Entry& entry) override; // Create a dictionary containing legend for net/ constants. Caller takes // ownership of returned value. // TODO(mmenke): Get rid of this, and have embedders use GetNetConstants // directly. Also maybe call that function by default, so only embedders // that need more constants need to worry about it. static base::DictionaryValue* GetConstants(); private: base::ScopedFILE file_; // The LogLevel to log at. NetLog::LogLevel log_level_; // True if OnAddEntry() has been called at least once. bool added_events_; DISALLOW_COPY_AND_ASSIGN(NetLogLogger); }; } // namespace net #endif // NET_BASE_NET_LOG_LOGGER_H_