Skip to content

Commit 4c2329e

Browse files
committed
feat(main): 实现通过配置文件创建与配置file_sink
1 parent aa96128 commit 4c2329e

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

modules/main/log.cpp

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,14 @@ bool Log::initialize(const char *proc_name, Context &ctx, const Json &cfg)
7070
initSyslogSinkByJson(js_log.at("syslog"));
7171
}
7272

73-
#if 0
7473
//! FILELOG
7574
if (util::json::HasObjectField(js_log, "files")) {
7675
auto &js_files = js_log.at("files");
7776
for (auto &js_file : js_files.items()) {
78-
auto async_file_sink = new log::AsyncFileSink;
79-
async_file_sink_map_[js_file.key()] = async_file_sink;
80-
//TODO
77+
installFileSink(js_file.key());
78+
initFileSinkByJson(js_file.key(), js_file.value(), proc_name);
8179
}
8280
}
83-
#endif
8481
}
8582
return true;
8683
}
@@ -200,30 +197,34 @@ bool Log::installFileSink(const std::string &name)
200197
return true;
201198
}
202199

203-
#if 0
204-
bool Log::initFileSinkByJson(const std::string &name, const Json &js)
200+
bool Log::initFileSinkByJson(const std::string &name, const Json &js, const char *proc_name)
205201
{
202+
auto iter = file_sinks_.find(name);
203+
if (iter == file_sinks_.end())
204+
return false;
205+
206+
auto &sink = iter->second->sink;
207+
208+
initSinkByJson(sink, js);
209+
206210
std::string path;
207-
if (util::json::GetField(js_file, "path", path))
208-
async_file_sink->setFilePath(path);
211+
if (util::json::GetField(js, "path", path))
212+
sink.setFilePath(path);
209213

210214
std::string prefix = util::fs::Basename(proc_name);
211-
util::json::GetField(js_file, "prefix", prefix);
212-
async_file_sink->setFilePrefix(prefix);
215+
util::json::GetField(js, "prefix", prefix);
216+
sink.setFilePrefix(prefix);
213217

214218
bool enable_sync = false;
215-
if (util::json::GetField(js_file, "enable_sync", enable_sync))
216-
async_file_sink->setFileSyncEnable(enable_sync);
219+
if (util::json::GetField(js, "enable_sync", enable_sync))
220+
sink.setFileSyncEnable(enable_sync);
217221

218222
unsigned int max_size = 0;
219-
if (util::json::GetField(js_file, "max_size", max_size))
220-
async_file_sink->setFileMaxSize(max_size * 1024);
221-
222-
initSinkByJson(*async_file_sink, js_file);
223+
if (util::json::GetField(js, "max_size", max_size))
224+
sink.setFileMaxSize(max_size * 1024);
223225

224226
return true;
225227
}
226-
#endif
227228

228229
bool Log::uninstallFileSink(const std::string &name)
229230
{
@@ -234,12 +235,17 @@ bool Log::uninstallFileSink(const std::string &name)
234235
auto file_sink = iter->second;
235236
file_sinks_.erase(iter);
236237

238+
uninstallFileSink(file_sink, name);
239+
return true;
240+
}
241+
242+
bool Log::uninstallFileSink(FileSink *file_sink, const std::string &name)
243+
{
237244
uninstallShellForFileSink(file_sink->nodes, name);
238245

239246
file_sink->sink.disable();
240247
file_sink->sink.cleanup();
241248
CHECK_DELETE_OBJ(file_sink);
242-
243249
return true;
244250
}
245251

@@ -248,7 +254,9 @@ void Log::cleanup()
248254
uninstallStdoutSink();
249255
uninstallSyslogSink();
250256

251-
//TODO
257+
for (auto &item: file_sinks_)
258+
uninstallFileSink(item.second, item.first);
259+
file_sinks_.clear();
252260
}
253261

254262
void Log::initSinkByJson(log::Sink &sink, const Json &js)

modules/main/log.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@ class Log {
8585

8686
//file相关
8787
bool installFileSink(const std::string &name);
88-
bool initFileSinkByJson(const std::string &name, const Json &js);
88+
bool initFileSinkByJson(const std::string &name, const Json &js, const char *proc_name);
8989
bool uninstallFileSink(const std::string &name);
90+
bool uninstallFileSink(FileSink *file_sink, const std::string &name);
9091

9192
//! 通过JSON初始化Sink共有的配置项
9293
void initSinkByJson(log::Sink &sink, const Json &js);

0 commit comments

Comments
 (0)