Skip to content

Commit b4f90fd

Browse files
author
Grok Compression
committed
logging: support trace and debug
1 parent ce24207 commit b4f90fd

File tree

6 files changed

+68
-47
lines changed

6 files changed

+68
-47
lines changed

src/lib/codec/common/common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ void errorCallback(const char* msg, void* client_data);
234234
void warningCallback(const char* msg, void* client_data);
235235
void infoCallback(const char* msg, void* client_data);
236236

237-
237+
void configureLogging(const std::string& logfile);
238238

239239

240240
#define CLI11_PARSE_CUSTOM(app, ...) \

src/lib/codec/jp2/GrkCompress.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,7 +1060,7 @@ GrkRC GrkCompress::parseCommandLine(int argc, char* argv[], CompressInitParams*
10601060
std::string tileParts;
10611061
uint16_t rsiz;
10621062

1063-
bool eph, applyICC, irreversible, plt, sop, tlm, transferExifTags, verbose;
1063+
bool eph, applyICC, irreversible, plt, sop, tlm, transferExifTags;
10641064

10651065
auto outDirOpt = app.add_option("-a,--out-dir", outDir, "Output directory");
10661066
auto rateControlAlgorithmOpt =
@@ -1122,7 +1122,7 @@ GrkRC GrkCompress::parseCommandLine(int argc, char* argv[], CompressInitParams*
11221122
app.add_flag("-V,--transfer-exif-tags", transferExifTags, "Transfer Exif tags");
11231123
auto cinema2KOpt =
11241124
app.add_option("-w,--cinema-2k", cinema2K, "Digital cinema 2K profile")->default_val("24");
1125-
auto logfileOpt = app.add_option("-W,--log-file", logfile, "Log file");
1125+
app.add_option("-W,--log-file", logfile, "Log file");
11261126
auto cinema4KOpt =
11271127
app.add_option("-x,--cinema-4k", cinema4K, "Digital cinema 4K profile")->default_val("24");
11281128
auto tlmOpt = app.add_flag("-X,--tlm", tlm, "TLM marker");
@@ -1134,12 +1134,7 @@ GrkRC GrkCompress::parseCommandLine(int argc, char* argv[], CompressInitParams*
11341134
auto rsizOpt = app.add_option("-Z,--rsiz", rsiz, "Rsiz")->default_val(0);
11351135

11361136
CLI11_PARSE_CUSTOM(app, argc, argv);
1137-
1138-
if(logfileOpt->count() > 0)
1139-
{
1140-
auto file_logger = spdlog::basic_logger_mt("grk_compress", logfile);
1141-
spdlog::set_default_logger(file_logger);
1142-
}
1137+
configureLogging(logfile);
11431138
bool isHT = false;
11441139
if(resolutionsOpt->count() > 0)
11451140
parameters->numresolution = resolutions;

src/lib/codec/jp2/GrkDecompress.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -617,19 +617,14 @@ GrkRC GrkDecompress::parseCommandLine(int argc, char* argv[], DecompressInitPara
617617
auto upsampleOpt = cmd.add_flag("-u,--upsample", upsample, "Upsample");
618618
auto transferExifTagsOpt =
619619
cmd.add_flag("-V,--transfer-exif-tags", transferExifTags, "Transfer Exif tags");
620-
auto logfileOpt = cmd.add_option("-W,--log-file", logfile, "Log file");
620+
cmd.add_option("-W,--log-file", logfile, "Log file");
621621
auto xmlOpt = cmd.add_flag("-X,--xml", xml, "XML metadata");
622622
auto inDirOpt = cmd.add_option("-y,--batch-src", inDir, "Image Directory");
623623
auto durationOpt = cmd.add_option("-z,--Duration", duration, "Duration in seconds");
624624

625625
CLI11_PARSE_CUSTOM(cmd, argc, argv);
626626

627-
if(logfileOpt->count() > 0)
628-
{
629-
auto file_logger = spdlog::basic_logger_mt("grk_decompress", logfile);
630-
spdlog::set_default_logger(file_logger);
631-
}
632-
627+
configureLogging(logfile);
633628
initParams->transfer_exif_tags = transferExifTagsOpt->count() > 0;
634629
#ifndef GROK_HAVE_EXIFTOOL
635630
if(initParams->transfer_exif_tags)

src/lib/core/grok.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,16 @@ GRK_API void GRK_CALLCONV grk_set_msg_handlers(grk_msg_handlers msg_handlers)
236236
{
237237
Logger::logger_.info_handler = msg_handlers.info_callback;
238238
Logger::logger_.info_data_ = msg_handlers.info_data;
239+
Logger::logger_.debug_handler = msg_handlers.debug_callback;
240+
Logger::logger_.debug_data_ = msg_handlers.debug_data;
241+
Logger::logger_.trace_handler = msg_handlers.trace_callback;
242+
Logger::logger_.trace_data_ = msg_handlers.trace_data;
239243
Logger::logger_.warning_handler = msg_handlers.warn_callback;
240244
Logger::logger_.warning_data_ = msg_handlers.warn_data;
241245
Logger::logger_.error_handler = msg_handlers.error_callback;
242246
Logger::logger_.error_data_ = msg_handlers.error_data;
243247
}
248+
244249
static size_t grk_read_from_file(uint8_t* buffer, size_t numBytes, void* p_file)
245250
{
246251
return fread(buffer, 1, numBytes, (FILE*)p_file);
@@ -317,10 +322,12 @@ bool grk_decompress_buffer_detect_format(uint8_t* buffer, size_t len, GRK_CODEC_
317322
if(memcmp(buffer, JP2_RFC3745_MAGIC, 12) == 0)
318323
{
319324
magic_format = GRK_CODEC_JP2;
325+
grklog.debug("Detected JP2 image format");
320326
}
321327
else if(memcmp(buffer, J2K_CODESTREAM_MAGIC, 4) == 0)
322328
{
323329
magic_format = GRK_CODEC_J2K;
330+
grklog.debug("Detected J2K image format");
324331
}
325332
else
326333
{
@@ -341,7 +348,7 @@ bool GRK_CALLCONV grk_decompress_detect_format(const char* fileName, GRK_CODEC_F
341348
auto reader = fopen(fileName, "rb");
342349
if(!reader)
343350
{
344-
Logger::logger_.error("Unable to open file {}.", fileName);
351+
Logger::logger_.error("Unable to open file %s.", fileName);
345352
return false;
346353
}
347354

src/lib/core/util/ILogger.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
* You should have received a copy of the GNU Affero General Public License
1414
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1515
*/
16-
1716
#pragma once
1817

1918
#include <cstring>
@@ -24,9 +23,12 @@ namespace grk
2423

2524
struct ILogger
2625
{
26+
virtual ~ILogger() = default; // Virtual destructor for polymorphism
2727
virtual void info(const char* fmt, ...) = 0;
2828
virtual void warn(const char* fmt, ...) = 0;
2929
virtual void error(const char* fmt, ...) = 0;
30+
virtual void debug(const char* fmt, ...) = 0; // Added debug
31+
virtual void trace(const char* fmt, ...) = 0; // Added trace
3032
};
3133

32-
} // namespace grk
34+
} // namespace grk

src/lib/core/util/Logger.h

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616

1717
#pragma once
1818

19-
#include <cstring>
20-
#include <cstdarg>
21-
22-
#include "grok.h"
19+
#include "grok.h" // for grk_msg_callback
2320
#include "ILogger.h"
2421

2522
namespace grk
@@ -28,63 +25,88 @@ namespace grk
2825
struct Logger : public ILogger
2926
{
3027
Logger()
31-
: error_data_(nullptr), warning_data_(nullptr), info_data_(nullptr), error_handler(nullptr),
32-
warning_handler(nullptr), info_handler(nullptr)
28+
: error_data_(nullptr), warning_data_(nullptr), info_data_(nullptr), debug_data_(nullptr),
29+
trace_data_(nullptr), error_handler(nullptr), warning_handler(nullptr),
30+
info_handler(nullptr), debug_handler(nullptr), trace_handler(nullptr)
3331
{}
3432

3533
void info(const char* fmt, ...) override
3634
{
3735
if(!info_handler)
3836
return;
39-
va_list arg;
40-
va_start(arg, fmt);
41-
log_message(info_handler, info_data_, fmt, arg);
42-
va_end(arg);
37+
va_list args;
38+
va_start(args, fmt);
39+
log_message(info_handler, info_data_, fmt, args);
40+
va_end(args);
4341
}
42+
4443
void warn(const char* fmt, ...) override
4544
{
4645
if(!warning_handler)
4746
return;
48-
va_list arg;
49-
va_start(arg, fmt);
50-
log_message(warning_handler, warning_data_, fmt, arg);
51-
va_end(arg);
47+
va_list args;
48+
va_start(args, fmt);
49+
log_message(warning_handler, warning_data_, fmt, args);
50+
va_end(args);
5251
}
52+
5353
void error(const char* fmt, ...) override
5454
{
5555
if(!error_handler)
5656
return;
57-
va_list arg;
58-
va_start(arg, fmt);
59-
log_message(error_handler, error_data_, fmt, arg);
60-
va_end(arg);
57+
va_list args;
58+
va_start(args, fmt);
59+
log_message(error_handler, error_data_, fmt, args);
60+
va_end(args);
61+
}
62+
63+
void debug(const char* fmt, ...) override
64+
{
65+
if(!debug_handler)
66+
return;
67+
va_list args;
68+
va_start(args, fmt);
69+
log_message(debug_handler, debug_data_, fmt, args);
70+
va_end(args);
71+
}
72+
73+
void trace(const char* fmt, ...) override
74+
{
75+
if(!trace_handler)
76+
return;
77+
va_list args;
78+
va_start(args, fmt);
79+
log_message(trace_handler, trace_data_, fmt, args);
80+
va_end(args);
6181
}
6282

6383
void* error_data_;
6484
void* warning_data_;
6585
void* info_data_;
86+
void* debug_data_;
87+
void* trace_data_;
6688
grk_msg_callback error_handler;
6789
grk_msg_callback warning_handler;
6890
grk_msg_callback info_handler;
91+
grk_msg_callback debug_handler;
92+
grk_msg_callback trace_handler;
6993

7094
static Logger logger_;
7195

7296
private:
73-
template<typename... Args>
74-
void log_message(grk_msg_callback msg_handler, void* l_data, char const* const format,
75-
Args&... args) noexcept
97+
void log_message(grk_msg_callback msg_handler, void* l_data, const char* fmt,
98+
va_list args) noexcept
7699
{
77-
const int message_size = 512;
78-
if((format != nullptr))
100+
constexpr int message_size = 512;
101+
if(fmt != nullptr)
79102
{
80-
char message[message_size];
81-
memset(message, 0, message_size);
82-
vsnprintf(message, message_size, format, args...);
83-
msg_handler(message, l_data);
103+
char buffer[message_size];
104+
vsnprintf(buffer, message_size, fmt, args);
105+
msg_handler(buffer, l_data);
84106
}
85107
}
86108
};
87109

88110
extern Logger& grklog;
89111

90-
} // namespace grk
112+
} // namespace grk

0 commit comments

Comments
 (0)