@@ -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
228229bool 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
254262void Log::initSinkByJson (log::Sink &sink, const Json &js)
0 commit comments