Skip to content

Commit 6aeff18

Browse files
committed
=make demux not always global, make filelogger flush
1 parent b614253 commit 6aeff18

File tree

3 files changed

+29
-19
lines changed

3 files changed

+29
-19
lines changed

src/LoggingExtras.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
module LoggingExtras
22

33
using Base.CoreLogging:
4-
LogLevel, BelowMinLevel, Debug, Info, Warn, Error, AboveMaxLevel,
4+
global_logger,
5+
LogLevel, BelowMinLevel, Debug, Info, Warn, Error, AboveMaxLevel
56

67
import Base.CoreLogging:
78
AbstractLogger, SimpleLogger,
8-
handle_message, shouldlog, min_enabled_level, catch_exceptions,
9+
handle_message, shouldlog, min_enabled_level, catch_exceptions
910

11+
export demux_global_logger,
12+
DemuxLogger, FilterLogger, FileLogger
1013

1114
include("demuxlogger.jl")
1215
include("filteredlogger.jl")

src/demuxlogger.jl

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,41 @@ struct DemuxLogger <: AbstractLogger
22
loggers::Vector{AbstractLogger}
33
end
44

5+
6+
57
"""
6-
demux_global_logger!(loggers...; include_current=true)
8+
DemuxLogger(loggers...; include_current=true)
79
810
Sets the global_logger to demux,
911
so that messages are sent to all the loggers.
10-
If `include_current` is true, then messages are also sent to the old global logger.
12+
If `include_current_global` is true, then messages are also sent to the global logger
13+
(or rather to what was the global logger when this was constructed).
1114
Normally this would be the ConsoleLogger in the REPL etc.
1215
"""
13-
function demux_global_logger!(loggers...; include_current=true)
14-
loggers = collect(loggers)
15-
if include_current
16+
function DemuxLogger(loggers::Vararg{AbstractLogger}; include_current_global=true)
17+
loggers = Vector{AbstractLogger}(collect(loggers))
18+
if include_current_global
1619
push!(loggers, global_logger())
1720
end
18-
global_logger(DemuxLogger(loggers))
21+
DemuxLogger(loggers)
1922
end
2023

21-
function handle_message(demux::demux, level, message, _module, group, id, file, line; kwargs...)
24+
function handle_message(demux::DemuxLogger, level, message, _module, group, id, file, line; kwargs...)
2225
for logger in demux.loggers
2326
if shouldlog(logger, level, _module, group, id)
2427
handle_message(logger, level, message, _module, group, id, file, line; kwargs...)
2528
end
2629
end
2730
end
2831

29-
function shouldlog(demux::demux, level, _module, group, id)
32+
function shouldlog(demux::DemuxLogger, level, _module, group, id)
3033
any(shouldlog(logger, level, _module, group, id) for logger in demux.loggers)
3134
end
3235

33-
function min_enabled_level(demux::demux)
36+
function min_enabled_level(demux::DemuxLogger)
3437
minimum(min_enabled_level(logger) for logger in demux.loggers)
3538
end
3639

37-
function catch_exceptions(demux::demux)
40+
function catch_exceptions(demux::DemuxLogger)
3841
any(catch_exceptions(logger) for logger in demux.loggers)
3942
end

src/filelogger.jl

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1+
# TODO: Maybe this should just be a function
2+
# It is a super thing wrapper around a SimpleLogger
3+
4+
15
struct FileLogger <: AbstractLogger
26
logger::SimpleLogger
3-
function FileLogger(path, level=Info; append=false)
4-
filehandle = open(path, append ? "a" : "w")
5-
this = new(SimpleLogger(filehandle, level))
6-
finalizer(this) do this
7-
close(filehandle)
8-
end
9-
end
7+
always_flush::Bool
8+
end
9+
10+
function FileLogger(path, level=Info; append=false, always_flush=true)
11+
filehandle = open(path, append ? "a" : "w")
12+
FileLogger(SimpleLogger(filehandle, level), always_flush)
1013
end
1114

1215

1316
function handle_message(filelogger::FileLogger, level, message, _module, group, id, file, line; kwargs...)
1417
handle_message(filelogger.logger, level, message, _module, group, id, file, line; kwargs...)
18+
filelogger.always_flush && flush(filelogger.logger.stream)
1519
end
1620
shouldlog(filelogger::FileLogger, level, _module, group, id) = shouldlog(filelogger.logger, level, _module, group, id)
1721
min_enabled_level(filelogger::FileLogger) = min_enabled_level(filelogger.logger)

0 commit comments

Comments
 (0)