@@ -11,7 +11,7 @@ import JSON: show_json
1111
1212import Logging: shouldlog, min_enabled_level, catch_exceptions, handle_message
1313import Base: write, close, rawhandle
14- export RollingLogger, RollingFileWriter, RollingFileWriterTee, postrotate
14+ export RollingLogger, RollingFileWriter, postrotate
1515
1616const BUFFSIZE = 1024 * 16 # try and read 16K pages when possible
1717const DEFAULT_MAX_LOG_ENTRY_SIZE = 256 * 1024
@@ -34,16 +34,12 @@ mutable struct RollingFileWriter <: IO
3434 filesize:: Int
3535 stream:: IO
3636 lck:: ReentrantLock
37- procstream:: Union{Nothing,Pipe}
38- procstreamer:: Union{Nothing,Task}
39- procstreamteelogger:: Union{Nothing,AbstractLogger}
40- assumed_level:: LogLevel
4137 postrotate:: Union{Nothing,Function}
4238
4339 function RollingFileWriter (filename:: String , sizelimit:: Int , nfiles:: Int ; rotate_on_init= false )
4440 stream = open (filename, " a" )
4541 filesize = stat (stream). size
46- io = new (filename, sizelimit, nfiles, filesize, stream, ReentrantLock (), nothing , nothing , nothing , Logging . Info, nothing )
42+ io = new (filename, sizelimit, nfiles, filesize, stream, ReentrantLock (), nothing )
4743 if rotate_on_init && filesize > 0
4844 rotate_file (io)
4945 end
@@ -61,28 +57,11 @@ function postrotate(fn::Function, io::RollingFileWriter)
6157 nothing
6258end
6359
64- """
65- Tee all lines to the provided logger
66- """
67- function tee (io:: RollingFileWriter , logger:: AbstractLogger , level:: LogLevel )
68- io. procstreamteelogger = logger
69- io. assumed_level = level
70- io
71- end
72-
7360"""
7461Close any open file handle and streams.
7562A closed object must not be used again.
7663"""
7764function close (io:: RollingFileWriter )
78- if io. procstream != = nothing
79- close (io. procstream)
80- lock (io. lck) do
81- io. procstream = nothing
82- io. procstreamer = nothing
83- io. procstreamteelogger = nothing
84- end
85- end
8665 close (io. stream)
8766end
8867
@@ -155,24 +134,6 @@ function rotate_file(io::RollingFileWriter)
155134 nothing
156135end
157136
158- """
159- Tees raw log entries made a RollingFileWriter on to a provided Julia AbstractLogger.
160-
161- Each line of text is taken as a single log message.
162-
163- All log entries are made with the same log level, which can be provided during construction. It leaves
164- further examination/parsing of log messages (to extract parameters, or detect exact log levels) to the
165- downstream logger.
166- """
167- function RollingFileWriterTee (filename:: String , sizelimit:: Int , nfiles:: Int , logger:: AbstractLogger , assumed_level:: LogLevel = Logging. Info)
168- io = RollingFileWriter (filename, sizelimit, nfiles)
169- RollingFileWriterTee (io, logger, assumed_level)
170- end
171-
172- function RollingFileWriterTee (io:: RollingFileWriter , logger:: AbstractLogger , assumed_level:: LogLevel = Logging. Info)
173- tee (io, logger, assumed_level)
174- end
175-
176137"""
177138RollingLogger(filename, sizelimit, nfiles, min_level=Info; timestamp_identifier::Symbol=:time, format::Symbol=:console)
178139Log into a log file. Rotate log file based on file size. Compress rotated logs.
@@ -277,44 +238,4 @@ function handle_message(logger::RollingLogger, level, message, _module, group, i
277238 nothing
278239end
279240
280- function stream_process_logs (writer:: RollingFileWriter )
281- try
282- while true
283- logline = readline (writer. procstream; keep= true )
284- if ! isempty (logline)
285- write (writer, logline)
286- if writer. procstreamteelogger != = nothing
287- @logmsg (writer. assumed_level, strip (logline))
288- end
289- end
290- eof (writer. procstream) && break
291- end
292- finally
293- close (writer. procstream)
294- lock (writer. lck) do
295- writer. procstream = nothing
296- writer. procstreamer = nothing
297- end
298- end
299- end
300-
301- function rawhandle (writer:: RollingFileWriter )
302- lock (writer. lck) do
303- if (writer. procstream === nothing ) || ! isopen (Base. pipe_writer (writer. procstream))
304- writer. procstream = Pipe ()
305- Base. link_pipe! (writer. procstream)
306- writer. procstreamer = @async begin
307- if writer. procstreamteelogger != = nothing
308- with_logger (writer. procstreamteelogger) do
309- stream_process_logs (writer)
310- end
311- else
312- stream_process_logs (writer)
313- end
314- end
315- end
316- return rawhandle (Base. pipe_writer (writer. procstream))
317- end
318- end
319-
320241end # module
0 commit comments