diff --git a/src/log_storage.hpp b/src/log_storage.hpp
new file mode 100644
index 0000000..b2a6271
--- /dev/null
+++ b/src/log_storage.hpp
@@ -0,0 +1,99 @@
+/**
+ * @brief Log storage.
+ *
+ * This file is part of HostLogger project.
+ *
+ * Copyright (c) 2018 YADRO
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <ctime>
+#include <list>
+#include <string>
+#include <zlib.h>
+
+
+/** @class LogStorage
+ *  @brief Log storage implementation.
+ *         All functions within this class are not thread-safe.
+ */
+class LogStorage
+{
+public:
+    /** @brief Constructor. */
+    LogStorage();
+
+    /** @brief Parse input log stream and append messages to the storage.
+     *
+     *  @param[in] data - pointer to the message buffer
+     *  @param[in] len - length of the buffer in bytes
+     */
+    void parse(const char* data, size_t len);
+
+    /** @brief Clear (reset) storage. */
+    void clear();
+
+    /** @brief Check storage for empty.
+     *
+     *  @return true if storage is empty
+     */
+    bool empty() const;
+
+    /** @brief Save messages from storage to the specified file.
+     *
+     *  @param[in] fileName - path to the file
+     *
+     *  @return error code, 0 if operation completed successfully
+     */
+    int write(const char* fileName) const;
+
+private:
+    /** @struct Message
+     *  @brief Represent log message (single line from host log).
+     */
+    struct Message
+    {
+        /** @brief Timestamp (message creation time). */
+        time_t timeStamp;
+        /** @brief Text of the message. */
+        std::string text;
+    };
+
+    /** @brief Append new message to the storage.
+     *
+     *  @param[in] msg - pointer to the message buffer
+     *  @param[in] len - length of the buffer in bytes
+     */
+    void append(const char* msg, size_t len);
+
+    /** @brief Write message to the file.
+     *
+     *  @param[in] fd - descriptor of the file to write
+     *  @param[in] msg - message to write
+     *
+     *  @return error code, 0 if operation completed successfully
+     */
+    int write(gzFile fd, const Message& msg) const;
+
+    /** @brief Shrink storage by removing oldest messages. */
+    void shrink();
+
+private:
+    /** @brief List of messages. */
+    std::list<Message> messages_;
+    /** @brief Flag to indicate that the last message is incomplete. */
+    bool last_complete_;
+};
