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)


Tagged:

Best Answer

  • Jirapongse
    Answer ✓

    @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.