parent
9c816badfb
commit
338aeaa8f3
@ -0,0 +1,62 @@
|
|||||||
|
import Logging: min_enabled_level, shouldlog, handle_message
|
||||||
|
using Base.CoreLogging, Logging, Printf
|
||||||
|
|
||||||
|
struct TimeLogger <: AbstractLogger
|
||||||
|
initial_time::Float64
|
||||||
|
file::Union{Nothing, IOStream}
|
||||||
|
screen_log_level
|
||||||
|
io_log_level
|
||||||
|
end
|
||||||
|
|
||||||
|
function TimeLogger(;
|
||||||
|
initial_time::Float64,
|
||||||
|
file::Union{Nothing, IOStream} = nothing,
|
||||||
|
screen_log_level = CoreLogging.Info,
|
||||||
|
io_log_level = CoreLogging.Info,
|
||||||
|
) :: TimeLogger
|
||||||
|
return TimeLogger(initial_time, file, screen_log_level, io_log_level)
|
||||||
|
end
|
||||||
|
|
||||||
|
min_enabled_level(logger::TimeLogger) = logger.io_log_level
|
||||||
|
shouldlog(logger::TimeLogger, level, _module, group, id) = true
|
||||||
|
|
||||||
|
function handle_message(logger::TimeLogger,
|
||||||
|
level,
|
||||||
|
message,
|
||||||
|
_module,
|
||||||
|
group,
|
||||||
|
id,
|
||||||
|
filepath,
|
||||||
|
line;
|
||||||
|
kwargs...)
|
||||||
|
elapsed_time = time() - logger.initial_time
|
||||||
|
time_string = @sprintf("[%12.3f] ", elapsed_time)
|
||||||
|
|
||||||
|
if level >= Logging.Error
|
||||||
|
color = :light_red
|
||||||
|
elseif level >= Logging.Warn
|
||||||
|
color = :light_yellow
|
||||||
|
else
|
||||||
|
color = :light_green
|
||||||
|
end
|
||||||
|
|
||||||
|
if level >= logger.screen_log_level
|
||||||
|
printstyled(time_string, color=color)
|
||||||
|
println(message)
|
||||||
|
end
|
||||||
|
if logger.file != nothing && level >= logger.io_log_level
|
||||||
|
write(logger.file, time_string)
|
||||||
|
write(logger.file, message)
|
||||||
|
write(logger.file, "\n")
|
||||||
|
flush(logger.file)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function setup_logger()
|
||||||
|
initial_time = time()
|
||||||
|
global_logger(TimeLogger(initial_time=initial_time))
|
||||||
|
miplearn = pyimport("miplearn")
|
||||||
|
miplearn.setup_logger(initial_time)
|
||||||
|
end
|
||||||
|
|
||||||
|
export TimeLogger
|
@ -0,0 +1,37 @@
|
|||||||
|
# MIPLearn: Extensible Framework for Learning-Enhanced Mixed-Integer Optimization
|
||||||
|
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
|
||||||
|
# Released under the modified BSD license. See COPYING.md for more details.
|
||||||
|
|
||||||
|
from datetime import timedelta
|
||||||
|
import logging
|
||||||
|
import time
|
||||||
|
|
||||||
|
log_colors = {
|
||||||
|
"green": '\033[92m',
|
||||||
|
"yellow": '\033[93m',
|
||||||
|
"red": '\033[91m',
|
||||||
|
"reset": '\033[0m',
|
||||||
|
}
|
||||||
|
|
||||||
|
class TimeFormatter():
|
||||||
|
def __init__(self, start_time):
|
||||||
|
self.start_time = start_time
|
||||||
|
|
||||||
|
def format(self, record):
|
||||||
|
if record.levelno >= logging.ERROR:
|
||||||
|
color = log_colors["red"]
|
||||||
|
elif record.levelno >= logging.WARNING:
|
||||||
|
color = log_colors["yellow"]
|
||||||
|
else:
|
||||||
|
color = log_colors["green"]
|
||||||
|
return "%s[%12.3f]%s %s" % (color,
|
||||||
|
record.created - self.start_time,
|
||||||
|
log_colors["reset"],
|
||||||
|
record.getMessage())
|
||||||
|
|
||||||
|
def setup_logger(start_time):
|
||||||
|
handler = logging.StreamHandler()
|
||||||
|
handler.setFormatter(TimeFormatter(start_time))
|
||||||
|
logging.getLogger().addHandler(handler)
|
||||||
|
logging.getLogger("miplearn").setLevel(logging.INFO)
|
||||||
|
lg = logging.getLogger("miplearn")
|
Loading…
Reference in new issue