summaryrefslogtreecommitdiff
path: root/ACE/examples/Log_Msg/test_log_msg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/Log_Msg/test_log_msg.cpp')
-rw-r--r--ACE/examples/Log_Msg/test_log_msg.cpp215
1 files changed, 215 insertions, 0 deletions
diff --git a/ACE/examples/Log_Msg/test_log_msg.cpp b/ACE/examples/Log_Msg/test_log_msg.cpp
new file mode 100644
index 00000000000..f6c48cd3bbe
--- /dev/null
+++ b/ACE/examples/Log_Msg/test_log_msg.cpp
@@ -0,0 +1,215 @@
+
+//=============================================================================
+/**
+ * @file test_log_msg.cpp
+ *
+ * $Id$
+ *
+ * This program tests the ACE_Log_Msg abstraction and demontrates
+ * several common use cases.
+ *
+ *
+ * @author Douglas Schmidt <schmidt@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#include "ace/OS_main.h"
+
+// FUZZ: disable check_for_streams_include
+#include "ace/streams.h"
+
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_unistd.h"
+#include "ace/OS_NS_stdlib.h"
+
+
+
+static void
+cleanup (void)
+{
+ ACE_DEBUG ((LM_INFO,
+ "leaving (%P)!\n"));
+}
+
+static void
+cause_error (void)
+{
+ errno = EWOULDBLOCK;
+ ACE_ERROR ((LM_DEBUG,
+ "would block\n"));
+}
+
+int
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ int counter = 1;
+
+ if (argc > 1) // Just give a dummy command-line argument to trigger this path.
+ {
+ if (ACE_LOG_MSG->open (argv[0],
+ ACE_Log_Msg::OSTREAM) == -1)
+ ACE_ERROR ((LM_ERROR,
+ "cannot open logger!!!\n"));
+
+ cause_error ();
+ // Check to see what happened.
+ if (ACE_LOG_MSG->op_status () == -1
+ && ACE_LOG_MSG->errnum () == EWOULDBLOCK)
+ ACE_DEBUG ((LM_DEBUG,
+ "op_status and errnum work!\n"));
+ else
+ ACE_ERROR ((LM_ERROR,
+ "op_status and errnum failed!\n"));
+ }
+ else // The default behavior is to log to STDERR...
+ {
+ if (ACE_LOG_MSG->open (argv[0]) == -1)
+ ACE_ERROR ((LM_ERROR,
+ "cannot open logger!!!\n"));
+
+ cause_error ();
+
+ // Check to see what happened.
+ if (ACE_LOG_MSG->op_status () == -1
+ && ACE_LOG_MSG->errnum () == EWOULDBLOCK)
+ ACE_DEBUG ((LM_DEBUG,
+ "op_status and errnum work!\n"));
+ else
+ ACE_ERROR ((LM_ERROR,
+ "op_status and errnum failed!\n"));
+
+ // Exercise many different combinations of STDERR and OSTREAM.
+
+ double f = 3.1416 * counter++;
+ int i = 10000;
+
+ ACE_DEBUG ((LM_INFO,
+ "%10f, %*s%s = %d\n",
+ f,
+ 8,
+ "",
+ "hello",
+ i));
+
+#if !defined (ACE_LACKS_IOSTREAM_TOTALLY)
+
+ ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
+ ACE_LOG_MSG->msg_ostream (&cout);
+
+ f = 3.1416 * counter;
+ i = 10000 * counter++;
+
+ // This message will print twice - once for OSTREAM and once for
+ // STDERR.
+
+ ACE_DEBUG ((LM_INFO,
+ "%10f, %*s%s = %d\n",
+ f,
+ 8,
+ "",
+ "world",
+ i));
+
+ ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);
+
+ f = 3.1416 * counter;
+ i = 10000 * counter++;
+
+ ACE_DEBUG ((LM_INFO,
+ "%10f, %*s%s = %d\n",
+ f,
+ 8,
+ "",
+ "world",
+ i));
+
+ ACE_LOG_MSG->msg_ostream (0);
+
+ ACE_LOG_MSG->set_flags (ACE_Log_Msg::STDERR);
+
+ f = 3.1416 * counter;
+ i = 10000 * counter++;
+
+ ACE_DEBUG ((LM_INFO,
+ "%10f, %*s%s = %d\n",
+ f,
+ 8,
+ "",
+ "world",
+ i));
+
+ ACE_LOG_MSG->clr_flags (ACE_Log_Msg::OSTREAM);
+ ACE_LOG_MSG->msg_ostream (&cerr);
+
+ f = 3.1416 * counter;
+ i = 10000 * counter++;
+
+ ACE_DEBUG ((LM_INFO,
+ "%10f, %*s%s = %d\n",
+ f,
+ 8,
+ "",
+ "world",
+ i));
+
+#endif /* !defined (ACE_LACKS_IOSTREAM_TOTALLY) */
+
+ static int array[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};
+
+ // Print out the binary bytes of the array in hex form.
+ ACE_LOG_MSG->log_hexdump (LM_DEBUG,
+ (char *) array,
+ sizeof array);
+
+ // Disable the LM_DEBUG and LM_INFO messages at the process level.
+ u_long priority_mask =
+ ACE_LOG_MSG->priority_mask (ACE_Log_Msg::PROCESS);
+ ACE_CLR_BITS (priority_mask,
+ LM_DEBUG | LM_INFO);
+ ACE_LOG_MSG->priority_mask (priority_mask,
+ ACE_Log_Msg::PROCESS);
+
+ ACE_DEBUG ((LM_INFO,
+ "This LM_INFO message should not print!\n"));
+ ACE_DEBUG ((LM_DEBUG,
+ "This LM_DEBUG message should not print!\n"));
+
+ ACE_SET_BITS (priority_mask,
+ LM_INFO);
+ ACE_LOG_MSG->priority_mask (priority_mask,
+ ACE_Log_Msg::PROCESS);
+
+ ACE_DEBUG ((LM_INFO,
+ "This LM_INFO message should print!\n"));
+ ACE_DEBUG ((LM_DEBUG,
+ "This LM_DEBUG message should not print!\n"));
+
+ ACE_CLR_BITS (priority_mask, LM_INFO);
+ ACE_LOG_MSG->priority_mask (priority_mask,
+ ACE_Log_Msg::PROCESS);
+
+ ACE_DEBUG ((LM_INFO,
+ "This LM_INFO message should not print!\n"));
+ ACE_DEBUG ((LM_DEBUG,
+ "This LM_DEBUG message should not print!\n"));
+
+ char badname[] = "badname";
+
+ char *l_argv[2];
+ l_argv[0] = badname;
+ l_argv[1] = 0;
+
+ if (ACE_OS::execv (badname,
+ l_argv) == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "%n: (%x), %p%r\n",
+ 10000,
+ badname,
+ cleanup));
+ ACE_OS::_exit ();
+ }
+ }
+ return 0;
+}