question

Upvotes
Accepted
3 0 0 1

Issue with RFA fileLoggerFilename config option '{a}' and absolute paths

Hi,

Using rfa8.2.1.L1.linux.rrg C++ on Linux, I have seen that the AppLogger log file is not generated correctly if the application is executed using the full path to the executable.

I have a ValueAdd Consumer application which configures application logging:

\Logger\AppLogger\fileLoggerEnabled  = true
\Logger\AppLogger\fileLoggerFilename = "{a}.rfa.log"

If I execute the application like this:

./TestConsumer

then the log file "TestConsumer.rfa.log" is created as expected.

But if I execute the application using the full path like this:

/the/path/to/the/application/TestConsumer

then either no log file is created, or occasionally a log file with a garbage name like

"ZZZZZZZZZZZZZZZZ\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ������������.rfa.log" is created.

Am I misconfiguring logging somehow, or is there another issue here?

If I run the application under valgrind

valgrind --tool=memcheck --track-origins=yes ./TestConsumer

no errors are reported, but if I run using the full path

valgrind --tool=memcheck  --track-origins=yes /the/path/to/the/application/TestConsumer

then errors like this are reported (full output attached as valgrind-output.txt):

==1234== Conditional jump or move depends on uninitialised value(s)
==1234==    at 0x56F1841: rfa::support::RFA_SearchAndReplace(int, int, char*&, int) (in lib/libRFA_Config.so)
==1234==    by 0x56F1A7C: rfa::support::RFA_FormatOptionString(char const*, char*, unsigned int) (in lib/libRFA_Config.so)
==1234==    by 0x56F1C7F: rfa::support::RFA_CreateDirectory(char const*, char*, unsigned int, bool) (in lib/libRFA_Config.so)
==1234==    by 0x591BDC4: rfa::logger::FileLogAction::init(rfa::common::RFA_String const&, long) (in lib/libRFA_Logger.so)
==1234==    by 0x591BFD3: rfa::logger::FileLogAction::FileLogAction(rfa::common::RFA_String const&, long) (in lib/libRFA_Logger.so)
==1234==    by 0x591779E: rfa::logger::ApplicationLoggerImpl::ApplicationLoggerImpl(rfa::common::ComponentName const&, rfa::config::ConfigTree const*) (in lib/libRFA_Logger.so)
==1234==    by 0x5917BFA: rfa::logger::ApplicationLoggerImpl::acquireImpl(rfa::common::RFA_String const&) (in lib/libRFA_Logger.so)
==1234==    by 0x6315198: rfa::valueAdd::admin::AdminCore::init() (in lib/libRFA_ValueAdd.so)
==1234==    by 0x63181DB: rfa::valueAdd::admin::ConsumerCore::initialize() (in lib/libRFA_ValueAdd.so)
==1234==    by 0x404D72: main (TestConsumer.cpp:49)
==1234==  Uninitialised value was created by a stack allocation
==1234==    at 0x56F171C: rfa::support::RFA_SearchAndReplace(int, int, char*&, int) (in lib/libRFA_Config.so)


rfalogginglinux
valgrind-output.txt (13.8 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

1 Answer

Upvotes
Accepted
49.4k 123 44 61

@Richard.McCarthy

Thank you for reporting this issue.

According to your investigation, it looks like to a bug in the API.

Please contact RDC (Refinitiv Developer Connect) contacts in your company to submit this issue to the API support team for further investigation. RDC contacts can access Contact Premium Support on the RFA C++ product page to submit a ticket to the API support team.

Sorry for this inconvenience.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.