/src/spdlog/include/spdlog/sinks/basic_file_sink.h
Line | Count | Source |
1 | | // Copyright(c) 2015-present, Gabi Melman & spdlog contributors. |
2 | | // Distributed under the MIT License (http://opensource.org/licenses/MIT) |
3 | | |
4 | | #pragma once |
5 | | |
6 | | #include <spdlog/details/file_helper.h> |
7 | | #include <spdlog/details/null_mutex.h> |
8 | | #include <spdlog/details/synchronous_factory.h> |
9 | | #include <spdlog/sinks/base_sink.h> |
10 | | |
11 | | #include <mutex> |
12 | | #include <string> |
13 | | |
14 | | namespace spdlog { |
15 | | namespace sinks { |
16 | | /* |
17 | | * Trivial file sink with single file as target |
18 | | */ |
19 | | template <typename Mutex> |
20 | | class basic_file_sink final : public base_sink<Mutex> { |
21 | | public: |
22 | | explicit basic_file_sink(const filename_t &filename, |
23 | | bool truncate = false, |
24 | | const file_event_handlers &event_handlers = {}); |
25 | | const filename_t &filename() const; |
26 | | void truncate(); |
27 | | |
28 | | protected: |
29 | | void sink_it_(const details::log_msg &msg) override; |
30 | | void flush_() override; |
31 | | |
32 | | private: |
33 | | details::file_helper file_helper_; |
34 | | }; |
35 | | |
36 | | using basic_file_sink_mt = basic_file_sink<std::mutex>; |
37 | | using basic_file_sink_st = basic_file_sink<details::null_mutex>; |
38 | | |
39 | | } // namespace sinks |
40 | | |
41 | | // |
42 | | // factory functions |
43 | | // |
44 | | template <typename Factory = spdlog::synchronous_factory> |
45 | | inline std::shared_ptr<logger> basic_logger_mt(const std::string &logger_name, |
46 | | const filename_t &filename, |
47 | | bool truncate = false, |
48 | 5 | const file_event_handlers &event_handlers = {}) { |
49 | 5 | return Factory::template create<sinks::basic_file_sink_mt>(logger_name, filename, truncate, |
50 | 5 | event_handlers); |
51 | 5 | } |
52 | | |
53 | | template <typename Factory = spdlog::synchronous_factory> |
54 | | inline std::shared_ptr<logger> basic_logger_st(const std::string &logger_name, |
55 | | const filename_t &filename, |
56 | | bool truncate = false, |
57 | | const file_event_handlers &event_handlers = {}) { |
58 | | return Factory::template create<sinks::basic_file_sink_st>(logger_name, filename, truncate, |
59 | | event_handlers); |
60 | | } |
61 | | |
62 | | } // namespace spdlog |
63 | | |
64 | | #ifdef SPDLOG_HEADER_ONLY |
65 | | #include "basic_file_sink-inl.h" |
66 | | #endif |