diff --git a/src/cli.cr b/src/cli.cr index 2d9557d..d8219ba 100644 --- a/src/cli.cr +++ b/src/cli.cr @@ -2,6 +2,7 @@ require "option_parser" require "digest/sha256" require "colorize" +require "./log" require "./config" require "./build/cli" require "./build/run" @@ -14,6 +15,8 @@ require "./write/run" module DocMachine class Cli + Log = DocMachine::Log.for("cli") + def initialize end @@ -28,12 +31,18 @@ module DocMachine "Main options:" ].join("\n") - opts.on("-v", "--verbose", "Enable verbosity") do |verbose| - config.verbose = true + opts.on("-v", "--verbosity LEVEL", "Change verbosity level to LEVEL (0..3)") do |verbose| + verbose_i = verbose.to_i + verbose_i = 0 if verbose.to_i < 0 + verbose_i = 3 if verbose.to_i > 3 + config.verbosity = ::Log::Severity.from_value(3 - verbose_i) + rescue ex: ArgumentError + Log.error { "Wrong value for parameter --verbosity" } + exit 1 end opts.on("-h", "--help", "Show this help") do - Log.info { opts } + Log.notice { opts } exit end @@ -47,15 +56,17 @@ module DocMachine end parser.parse(args) + ::Log.setup(config.verbosity, ::Log::IOBackend.new(formatter: BaseFormat)) + Log.notice { "verbosity level = #{config.verbosity}" } Log.debug { "commands = #{commands}" } if commands.size < 1 Log.error { parser.to_s } - Log.error { "ERROR: no command defined" } + Log.error { "No command defined" } end commands.each do |command| - # Log.info { "== Running #{command}" } + Log.debug { "== Running #{command}" } command.call() end end diff --git a/src/config.cr b/src/config.cr index a2f90f4..01485f1 100644 --- a/src/config.cr +++ b/src/config.cr @@ -5,7 +5,7 @@ require "./module" module DocMachine class Config - property verbose : Bool = false + property verbosity = ::Log::Severity::Notice def initialize end diff --git a/src/log.cr b/src/log.cr new file mode 100644 index 0000000..0b8bc1b --- /dev/null +++ b/src/log.cr @@ -0,0 +1,38 @@ + +require "log" +require "colorize" + +struct DebugFormat < Log::StaticFormatter + def run + string @entry.severity.label[0].downcase + string ": " + source + string ": " + message + end + end + +struct BaseFormat < Log::StaticFormatter + def run + io = ::IO::Memory.new + + color = case @entry.severity + when ::Log::Severity::Error + Colorize.colorize.red.bold + when ::Log::Severity::Warn + Colorize.colorize.red.yellow + when ::Log::Severity::Notice + Colorize.colorize.bold + else + Colorize.colorize + end + + color.surround(io) do + io << @entry.message + end + + string io.to_s + end + end + +# Log.define_formatter BaseFormat, "#{severity.to_s.lstrip}(#{source}): #{message}" diff --git a/src/main.cr b/src/main.cr index 715054a..6f8ba11 100644 --- a/src/main.cr +++ b/src/main.cr @@ -1,10 +1,9 @@ require "./cli" - -Log.define_formatter BaseFormat, "#{message}" - +require "./log" ::Log.setup(:notice, Log::IOBackend.new(formatter: BaseFormat)) +::Log.progname = "(root)" app = DocMachine::Cli.new app.start(ARGV) diff --git a/src/write/cli.cr b/src/write/cli.cr index d6bc1d7..c7b378f 100644 --- a/src/write/cli.cr +++ b/src/write/cli.cr @@ -1,9 +1,9 @@ + require "./config" require "./run" +require "./module" module DocMachine::Write - Log = DocMachine::Log.for("write") - class Cli Log = DocMachine::Write::Log.for("cli") @@ -18,15 +18,20 @@ module DocMachine::Write end commands << ->() : Nil do + Log.debug { "before any" } if args.size < 1 - Log.error { "ERROR: No target given!" } + Log.error { "No target given!" } exit 1 end config.target_directory = args[0] + Log.debug { "before new" } app = DocMachine::Write::Run.new(config) + Log.debug { "before prepare" } app.prepare + Log.debug { "before start" } app.start + Log.debug { "before wait" } app.wait end end diff --git a/src/write/module.cr b/src/write/module.cr new file mode 100644 index 0000000..ea6ae71 --- /dev/null +++ b/src/write/module.cr @@ -0,0 +1,6 @@ + +require "../module" + +module DocMachine::Write + Log = DocMachine::Log.for("write") +end diff --git a/src/write/nodes/module.cr b/src/write/nodes/module.cr new file mode 100644 index 0000000..40f614a --- /dev/null +++ b/src/write/nodes/module.cr @@ -0,0 +1,6 @@ + +require "../module" + +module DocMachine::Write::Nodes + Log = DocMachine::Write::Log.for("nodes") +end diff --git a/src/write/run.cr b/src/write/run.cr index 571e337..0c2afd5 100644 --- a/src/write/run.cr +++ b/src/write/run.cr @@ -18,7 +18,7 @@ module DocMachine::Write # Verify parameters def prepare() if ! File.directory? @config.target_directory - Log.error { "ERROR: target must be a directory" } + Log.error { "Target must be a directory" } exit 1 end