Skip to content

Commit aa96128

Browse files
committed
feat(main): 将file sink的终端命令移到/log/sinks/files/目录下
1 parent b59a906 commit aa96128

File tree

2 files changed

+28
-15
lines changed

2 files changed

+28
-15
lines changed

modules/main/log.cpp

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ bool Log::installStdoutSink()
135135
return false;
136136

137137
stdout_sink_ = new StdoutSink;
138-
installShellForSink(stdout_sink_->sink, stdout_sink_->nodes, "stdout");
138+
installShellForSink(stdout_sink_->sink, sink_node_, stdout_sink_->nodes, "stdout");
139139

140140
return true;
141141
}
@@ -151,7 +151,7 @@ bool Log::uninstallStdoutSink()
151151
if (stdout_sink_ == nullptr)
152152
return false;
153153

154-
uninstallShellForSink(stdout_sink_->nodes, "stdout");
154+
uninstallShellForSink(sink_node_, stdout_sink_->nodes, "stdout");
155155

156156
stdout_sink_->sink.disable();
157157
CHECK_DELETE_RESET_OBJ(stdout_sink_);
@@ -164,7 +164,7 @@ bool Log::installSyslogSink()
164164
return false;
165165

166166
syslog_sink_ = new SyslogSink;
167-
installShellForSink(syslog_sink_->sink, syslog_sink_->nodes, "syslog");
167+
installShellForSink(syslog_sink_->sink, sink_node_, syslog_sink_->nodes, "syslog");
168168

169169
return true;
170170
}
@@ -180,7 +180,7 @@ bool Log::uninstallSyslogSink()
180180
if (syslog_sink_ == nullptr)
181181
return false;
182182

183-
uninstallShellForSink(syslog_sink_->nodes, "syslog");
183+
uninstallShellForSink(sink_node_, syslog_sink_->nodes, "syslog");
184184

185185
syslog_sink_->sink.disable();
186186
syslog_sink_->sink.cleanup();
@@ -195,7 +195,7 @@ bool Log::installFileSink(const std::string &name)
195195
return false;
196196

197197
auto file_sink = new FileSink;
198-
installShellForFileSink(file_sink->sink, file_sink->nodes, std::string("file:") + name);
198+
installShellForFileSink(file_sink->sink, file_sink->nodes, name);
199199
file_sinks_.emplace(name, file_sink);
200200
return true;
201201
}
@@ -234,11 +234,12 @@ bool Log::uninstallFileSink(const std::string &name)
234234
auto file_sink = iter->second;
235235
file_sinks_.erase(iter);
236236

237-
uninstallShellForFileSink(file_sink->nodes, std::string("file:") + name);
237+
uninstallShellForFileSink(file_sink->nodes, name);
238238

239239
file_sink->sink.disable();
240240
file_sink->sink.cleanup();
241241
CHECK_DELETE_OBJ(file_sink);
242+
242243
return true;
243244
}
244245

@@ -271,9 +272,9 @@ void Log::initSinkByJson(log::Sink &sink, const Json &js)
271272
}
272273
}
273274

274-
void Log::installShellForSink(log::Sink &sink, SinkShellNodes &nodes, const std::string &name)
275+
void Log::installShellForSink(log::Sink &sink, terminal::NodeToken parent_node, SinkShellNodes &nodes, const std::string &name)
275276
{
276-
nodes.dir = terminal::AddDirNode(*shell_, sink_node_, name);
277+
nodes.dir = terminal::AddDirNode(*shell_, parent_node, name);
277278

278279
{
279280
terminal::BooleanFuncNodeProfile profile;
@@ -360,20 +361,24 @@ void Log::installShellForSink(log::Sink &sink, SinkShellNodes &nodes, const std:
360361
}
361362
}
362363

363-
void Log::uninstallShellForSink(SinkShellNodes &nodes, const std::string &name)
364+
void Log::uninstallShellForSink(terminal::NodeToken parent_node, SinkShellNodes &nodes, const std::string &name)
364365
{
365366
shell_->deleteNode(nodes.dir);
366367
shell_->deleteNode(nodes.set_enable);
367368
shell_->deleteNode(nodes.set_color_enable);
368369
shell_->deleteNode(nodes.set_level);
369370
shell_->deleteNode(nodes.unset_level);
370371

371-
shell_->umountNode(sink_node_, name);
372+
shell_->umountNode(parent_node, name);
372373
}
373374

374375
void Log::installShellForFileSink(log::AsyncFileSink &sink, FileSinkShellNodes &nodes, const std::string &name)
375376
{
376-
installShellForSink(sink, nodes, name);
377+
//! 如果之前没有FileSink,则要创建并挂载files结点
378+
if (file_sinks_.empty())
379+
file_sink_node_ = terminal::AddDirNode(*shell_, sink_node_, "files");
380+
381+
installShellForSink(sink, file_sink_node_, nodes, name);
377382

378383
{
379384
terminal::StringFuncNodeProfile profile;
@@ -436,7 +441,13 @@ void Log::uninstallShellForFileSink(FileSinkShellNodes &nodes, const std::string
436441
shell_->deleteNode(nodes.set_sync_enable);
437442
shell_->deleteNode(nodes.set_max_size);
438443

439-
uninstallShellForSink(nodes, name);
444+
uninstallShellForSink(file_sink_node_, nodes, name);
445+
446+
if (file_sinks_.empty()) {
447+
shell_->umountNode(sink_node_, "files");
448+
shell_->deleteNode(file_sink_node_);
449+
file_sink_node_.reset();
450+
}
440451
}
441452

442453
}

modules/main/log.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,21 @@ class Log {
9393

9494
void initShell();
9595

96-
void installShellForSink(log::Sink &sink, SinkShellNodes &nodes, const std::string &name);
97-
void uninstallShellForSink(SinkShellNodes &nodes, const std::string &name);
96+
void installShellForSink(log::Sink &sink, terminal::NodeToken parent_node, SinkShellNodes &nodes, const std::string &name);
97+
void uninstallShellForSink(terminal::NodeToken parent_node, SinkShellNodes &nodes, const std::string &name);
9898

9999
void installShellForFileSink(log::AsyncFileSink &sink, FileSinkShellNodes &nodes, const std::string &name);
100100
void uninstallShellForFileSink(FileSinkShellNodes &nodes, const std::string &name);
101101

102102
private:
103103
terminal::TerminalNodes *shell_;
104-
terminal::NodeToken sink_node_;
105104

106105
StdoutSink *stdout_sink_ = nullptr;
107106
SyslogSink *syslog_sink_ = nullptr;
108107
std::map<std::string, FileSink*> file_sinks_;
108+
109+
terminal::NodeToken sink_node_;
110+
terminal::NodeToken file_sink_node_;
109111
};
110112

111113
}

0 commit comments

Comments
 (0)