let combine lst =
let rec fpos =
function
| logger :: tl ->
begin
match position logger with
| Some _ as pos ->
pos
| None ->
fpos tl
end
| [] ->
None
in
let lshard =
match lst with hd :: _ -> hd.lshard | [] -> shard_default
in
{
lshard = lshard;
fwrite =
(fun log_ev ->
List.iter
(fun logger ->
logger.fwrite log_ev) lst);
fpos = (fun () -> fpos lst);
fclose =
(fun () ->
List.iter (fun logger -> close logger) (List.rev lst));
}