@@ -70,17 +70,14 @@ bool Log::initialize(const char *proc_name, Context &ctx, const Json &cfg)
70
70
initSyslogSinkByJson (js_log.at (" syslog" ));
71
71
}
72
72
73
- #if 0
74
73
// ! FILELOG
75
74
if (util::json::HasObjectField (js_log, " files" )) {
76
75
auto &js_files = js_log.at (" files" );
77
76
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);
81
79
}
82
80
}
83
- #endif
84
81
}
85
82
return true ;
86
83
}
@@ -200,30 +197,34 @@ bool Log::installFileSink(const std::string &name)
200
197
return true ;
201
198
}
202
199
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)
205
201
{
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
+
206
210
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);
209
213
210
214
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);
213
217
214
218
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);
217
221
218
222
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 );
223
225
224
226
return true ;
225
227
}
226
- #endif
227
228
228
229
bool Log::uninstallFileSink (const std::string &name)
229
230
{
@@ -234,12 +235,17 @@ bool Log::uninstallFileSink(const std::string &name)
234
235
auto file_sink = iter->second ;
235
236
file_sinks_.erase (iter);
236
237
238
+ uninstallFileSink (file_sink, name);
239
+ return true ;
240
+ }
241
+
242
+ bool Log::uninstallFileSink (FileSink *file_sink, const std::string &name)
243
+ {
237
244
uninstallShellForFileSink (file_sink->nodes , name);
238
245
239
246
file_sink->sink .disable ();
240
247
file_sink->sink .cleanup ();
241
248
CHECK_DELETE_OBJ (file_sink);
242
-
243
249
return true ;
244
250
}
245
251
@@ -248,7 +254,9 @@ void Log::cleanup()
248
254
uninstallStdoutSink ();
249
255
uninstallSyslogSink ();
250
256
251
- // TODO
257
+ for (auto &item: file_sinks_)
258
+ uninstallFileSink (item.second , item.first );
259
+ file_sinks_.clear ();
252
260
}
253
261
254
262
void Log::initSinkByJson (log::Sink &sink, const Json &js)
0 commit comments