<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to 60: Cywin program core's on &amp;quot;log4cpp::Catergory::shutdown()&amp;quot;.</title><link>https://sourceforge.net/p/log4cpp/bugs/60/</link><description>Recent changes to 60: Cywin program core's on &amp;quot;log4cpp::Catergory::shutdown()&amp;quot;.</description><atom:link href="https://sourceforge.net/p/log4cpp/bugs/60/feed.rss" rel="self"/><language>en</language><lastBuildDate>Wed, 26 Feb 2003 16:06:18 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/log4cpp/bugs/60/feed.rss" rel="self" type="application/rss+xml"/><item><title>Cywin program core's on &amp;quot;log4cpp::Catergory::shutdown()&amp;quot;.</title><link>https://sourceforge.net/p/log4cpp/bugs/60/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;This program was built and executed under Cygwin.  It&lt;br /&gt;
generates a segmentation fault and core dumps on the &lt;br /&gt;
&amp;amp;quot;log4cpp::Catergory::shutdown()&amp;amp;quot; instruction.&lt;/p&gt;
&lt;p&gt;#include        &amp;amp;quot;Category.hh&amp;amp;quot;&lt;br /&gt;
#include        &amp;amp;quot;FileAppender.hh&amp;amp;quot;&lt;br /&gt;
#include        &amp;amp;quot;OstreamAppender.hh&amp;amp;quot;&lt;br /&gt;
#include        &amp;amp;quot;BasicLayout.hh&amp;amp;quot;&lt;br /&gt;
#include        &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
#include        &amp;amp;lt;signal.h&amp;amp;gt;&lt;br /&gt;
#include        &amp;amp;lt;unistd.h&amp;amp;gt;&lt;/p&gt;
&lt;p&gt;int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
// Handle these signals&lt;br /&gt;
signal(SIGUSR1, SignalHandler);&lt;br /&gt;
signal(SIGUSR2, SignalHandler);&lt;/p&gt;
&lt;p&gt;// 1 instantiate an appender object that&lt;br /&gt;
// will append to a log file&lt;br /&gt;
log4cpp::Appender* app = new&lt;br /&gt;
log4cpp::FileAppender(&amp;amp;quot;FileAppender&amp;amp;quot;,&lt;br /&gt;
&amp;amp;quot;/logs/testlog4cpp.log&amp;amp;quot;);&lt;br /&gt;
log4cpp::Appender* app2 = new&lt;br /&gt;
log4cpp::OstreamAppender(&amp;amp;quot;OstreamAppender&amp;amp;quot;,&lt;br /&gt;
&amp;amp;amp;std::cerr);&lt;/p&gt;
&lt;p&gt;// 2. Instantiate a layout object&lt;br /&gt;
// Two layouts come already available in log4cpp&lt;br /&gt;
// unless you create your own.&lt;br /&gt;
// BasicLayout includes a time stamp&lt;br /&gt;
log4cpp::Layout* layout =&lt;br /&gt;
new log4cpp::BasicLayout();&lt;/p&gt;
&lt;p&gt;// 3. attach the layout object to the&lt;br /&gt;
// appender object&lt;br /&gt;
app-&amp;amp;gt;setLayout(layout);&lt;br /&gt;
app2-&amp;amp;gt;setLayout(layout);&lt;/p&gt;
&lt;p&gt;// 4. Instantiate the category object&lt;br /&gt;
// you may extract the root category, but it is&lt;br /&gt;
// usually more practical to directly instance&lt;br /&gt;
// a child category&lt;br /&gt;
log4cpp::Category&amp;amp;amp; main_cat =&lt;br /&gt;
log4cpp::Category::getInstance(&amp;amp;quot;main_cat&amp;amp;quot;);&lt;br /&gt;
log4cpp::Category&amp;amp;amp; debug_cat =&lt;br /&gt;
log4cpp::Category::getInstance(&amp;amp;quot;debug_cat&amp;amp;quot;);&lt;/p&gt;
&lt;p&gt;// 5. Step 1&lt;br /&gt;
// an Appender when added to a category becomes&lt;br /&gt;
// an additional output destination unless&lt;br /&gt;
// Additivity is set to false when it is false,&lt;br /&gt;
// the appender added to the category replaces&lt;br /&gt;
// all previously existing appenders&lt;br /&gt;
main_cat.setAdditivity(false);&lt;br /&gt;
debug_cat.setAdditivity(false);&lt;/p&gt;
&lt;p&gt;// 5. Step 2&lt;br /&gt;
// this appender becomes the only one&lt;br /&gt;
main_cat.setAppender(app);&lt;br /&gt;
debug_cat.setAppender(app2);&lt;/p&gt;
&lt;p&gt;// 6. Set up the priority for the category&lt;br /&gt;
// and is given INFO priority&lt;br /&gt;
// attempts to log DEBUG messages will fail&lt;br /&gt;
main_cat.setPriority(log4cpp::Priority::INFO);&lt;br /&gt;
debug_cat.setPriority(log4cpp::Priority::DEBUG);&lt;/p&gt;
&lt;p&gt;// so we log some examples&lt;br /&gt;
main_cat.info(&amp;amp;quot;This is some info&amp;amp;quot;);&lt;br /&gt;
main_cat.debug(&amp;amp;quot;This debug message will fail to&lt;br /&gt;
write&amp;amp;quot;);&lt;br /&gt;
main_cat.alert(&amp;amp;quot;All hands abandon ship&amp;amp;quot;);&lt;br /&gt;
debug_cat.debug(&amp;amp;quot;This debug message will fail&lt;br /&gt;
to write&amp;amp;quot;);&lt;/p&gt;
&lt;p&gt;// you can log by using a log() method with&lt;br /&gt;
// a priority&lt;br /&gt;
main_cat.log(log4cpp::Priority::WARN, &amp;amp;quot;This&lt;br /&gt;
will be a logged warning&amp;amp;quot;);&lt;/p&gt;
&lt;p&gt;// gives you some programmatic control over&lt;br /&gt;
// priority levels&lt;br /&gt;
log4cpp::Priority::PriorityLevel priority;&lt;br /&gt;
bool this_is_critical = true;&lt;br /&gt;
if(this_is_critical)&lt;br /&gt;
priority = log4cpp::Priority::CRIT;&lt;br /&gt;
else&lt;br /&gt;
priority = log4cpp::Priority::DEBUG;&lt;/p&gt;
&lt;p&gt;// this would not be logged if priority&lt;br /&gt;
// == DEBUG, because the category priority is&lt;br /&gt;
// set to INFO&lt;br /&gt;
main_cat.log(priority,&amp;amp;quot;Importance depends on&lt;br /&gt;
context&amp;amp;quot;);&lt;/p&gt;
&lt;p&gt;// You may also log by using stream style&lt;br /&gt;
// operations on&lt;br /&gt;
main_cat.critStream() &amp;amp;lt;&amp;amp;lt; &amp;amp;quot;This will show up &amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
as &amp;amp;quot; &amp;amp;lt;&amp;amp;lt; 1&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt; &amp;amp;quot; critical message&amp;amp;quot;&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
log4cpp::CategoryStream::ENDLINE;&lt;br /&gt;
main_cat.emergStream() &amp;amp;lt;&amp;amp;lt; &amp;amp;quot;This will show up as &amp;amp;quot;&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt; 1 &amp;amp;lt;&amp;amp;lt; &amp;amp;quot; emergency message&amp;amp;quot; &amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
log4cpp::CategoryStream::ENDLINE;&lt;br /&gt;
debug_cat.debugStream() &amp;amp;lt;&amp;amp;lt; &amp;amp;quot;File &amp;amp;quot; &amp;amp;lt;&amp;amp;lt; __FILE__&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt; &amp;amp;quot; line &amp;amp;quot;&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt; __LINE__&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt; &amp;amp;quot;: This is a&lt;br /&gt;
streamed debug message&amp;amp;quot;&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
log4cpp::CategoryStream::ENDLINE;&lt;/p&gt;
&lt;p&gt;// Stream operations can be used directly&lt;br /&gt;
// with the main object, but are&lt;br /&gt;
// preceded by the severity level&lt;br /&gt;
main_cat &amp;amp;lt;&amp;amp;lt; log4cpp::Priority::ERROR&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt; &amp;amp;quot;And this will be an error&amp;amp;quot;&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt; log4cpp::CategoryStream::ENDLINE;&lt;/p&gt;
&lt;p&gt;// This illustrates a small bug in version&lt;br /&gt;
// 2.5 of log4cpp&lt;br /&gt;
main_cat.debug(&amp;amp;quot;debug&amp;amp;quot;); // this is correctly&lt;br /&gt;
// skipped&lt;br /&gt;
debug_cat.debug(&amp;amp;quot;debug&amp;amp;quot;);&lt;br /&gt;
main_cat.info(&amp;amp;quot;info&amp;amp;quot;);&lt;br /&gt;
main_cat.notice(&amp;amp;quot;notice&amp;amp;quot;);&lt;br /&gt;
main_cat.warn(&amp;amp;quot;warn&amp;amp;quot;);&lt;br /&gt;
main_cat.error(&amp;amp;quot;error&amp;amp;quot;);&lt;br /&gt;
main_cat.crit(&amp;amp;quot;crit&amp;amp;quot;);  // this prints ALERT&lt;br /&gt;
// main_cat : crit&lt;br /&gt;
main_cat.alert(&amp;amp;quot;alert&amp;amp;quot;);// this prints PANIC&lt;br /&gt;
// main_cat : alert&lt;br /&gt;
main_cat.emerg(&amp;amp;quot;emerg&amp;amp;quot;);// this prints UNKOWN&lt;br /&gt;
// main_cat : emerg&lt;/p&gt;
&lt;p&gt;main_cat.debug(&amp;amp;quot;Shutting down&amp;amp;quot;);// this will&lt;br /&gt;
// be skipped&lt;br /&gt;
debug_cat.debug(&amp;amp;quot;Shutting down&amp;amp;quot;);&lt;/p&gt;
&lt;p&gt;// clean up and flush all appenders&lt;br /&gt;
log4cpp::Category::shutdown();&lt;br /&gt;
std::cout &amp;amp;lt;&amp;amp;lt; &amp;amp;quot;After shutdown()&amp;amp;quot; &amp;amp;lt;&amp;amp;lt; std::endl;&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anonymous</dc:creator><pubDate>Wed, 26 Feb 2003 16:06:18 -0000</pubDate><guid>https://sourceforge.net783a3e4d3792651fd1c9751a1c3696efaab1664a</guid></item></channel></rss>