<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alteridem Consulting &#187; log4net</title>
	<atom:link href="http://www.alteridem.net/category/net/log4net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alteridem.net</link>
	<description>Software by Design</description>
	<lastBuildDate>Thu, 02 Sep 2010 17:52:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>log4net UdpAppender with IPv6 on Windows Vista and 7</title>
		<link>http://www.alteridem.net/2010/07/09/log4net-udpappender-with-ipv6-on-windows-vista-and-7/</link>
		<comments>http://www.alteridem.net/2010/07/09/log4net-udpappender-with-ipv6-on-windows-vista-and-7/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 17:31:40 +0000</pubDate>
		<dc:creator>Robert Prouse</dc:creator>
				<category><![CDATA[log4net]]></category>

		<guid isPermaLink="false">http://www.alteridem.net/2010/07/09/log4net-udpappender-with-ipv6-on-windows-vista-and-7/</guid>
		<description><![CDATA[log4net is a great logging framework for .NET, but it hasn’t been updated in years. When we moved to Windows Vista, we noticed that the UdpAppender stopped working with Chainsaw and with our internal logging tools when logging to localhost. After some Googling, we discovered that replacing localhost with 127.0.0.2 got everything working and we [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://logging.apache.org/log4net/index.html">log4net</a> is a great logging framework for .NET, but it hasn’t been updated in years. When we moved to Windows Vista, we noticed that the <a href="http://logging.apache.org/log4net/release/sdk/log4net.Appender.UdpAppender.html">UdpAppender</a> stopped working with <a href="http://logging.apache.org/chainsaw/index.html">Chainsaw</a> and with our internal logging tools when logging to <strong>localhost</strong>. After some Googling, we discovered that replacing <strong>localhost</strong> with <strong>127.0.0.2</strong> got everything working and we promptly forgot about it.</p>
<p>Earlier this week, we moved one of our projects over to .NET 4.0 and once again logging failed. In the console window while debugging the app, I noticed the following,</p>
<pre>log4net.Util.TypeConverters.ConversionNotSupportedException: Cannot convert from type [System.String]
  value [127.0.0.2] to type [System.Net.IPAddress] ---&gt;
  System.Net.Sockets.SocketException: No such host is known
       at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6)
       at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
       at log4net.Util.TypeConverters.IPAddressConverter.ConvertFrom(Object source)</pre>
<p>So, I tried changing back to <strong>localhost</strong> and the error changed to,</p>
<pre>log4net:ERROR [UdpAppender] Unable to send logging event to remote host ::1 on port 7071.
      System.Net.Sockets.SocketException (0x80004005): An address incompatible with
      the requested protocol was used
       at System.Net.Sockets.Socket.SendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags
         socketFlags, EndPoint remoteEP)
       at System.Net.Sockets.UdpClient.Send(Byte[] dgram, Int32 bytes, IPEndPoint endPoint)
       at log4net.Appender.UdpAppender.Append(LoggingEvent loggingEvent)</pre>
<p>At this point, I have some clues, specifically that localhost was being resolved as the IPv6 address ::1, not the IPv4 address 127.0.0.1. Looking through the reported issues I found that this problem had been <a href="https://issues.apache.org/jira/browse/LOG4NET-112">reported and fixed in 2007</a>. Unfortunately, that code isn’t in the release, so I downloaded the latest source and recompiled log4net. Of course, they don’t release the signing key, so I generated my own and signed the assembly myself.</p>
<p>This fixed my problems with the UdpAppender, although, if you use <strong>localhost</strong> on a Windows Vista or Windows 7 machine, it will resolve to the IPv6 address, so make sure that your receiver is listening on the IPv6 address. For example, in <a href="http://log2console.codeplex.com/">log2console,</a> under Receivers, set Use IPv6 Addresses to true for the UDP receiver. If your receiver does not support IPv6, use <strong>127.0.0.2</strong> for the address.</p>
<p>To save other people the hassle of recompiling log4net themselves to get the latest fixes, I have uploaded a release version of the assembly. Download it here.</p>
<ul>
<li><a href="http://www.alteridem.net/wp-content/uploads/2010/07/log4net_1.2.10.1.zip">log4net 1.2.10.1</a> -&#160; 260 KB Zip </li>
</ul>
<p>We are using this version of the assembly in our own projects, but I make no guarantees as to its stability.</p>
<p><strong>Update:</strong> Just to&#160; be clear, this is not an official log4net release and it is only compiled against .NET 2.0. I have made no code changes, it is just the code that is currently in the repository. This is only intended to save you having to download and compile if you run into the same problems I did. It is also not extensively tested. We are using it and File, Rolling File, Event Log and UDP Appenders seem to be working fine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alteridem.net/2010/07/09/log4net-udpappender-with-ipv6-on-windows-vista-and-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>log4net Slides and Example Code</title>
		<link>http://www.alteridem.net/2008/02/29/log4net-slides-and-example-code/</link>
		<comments>http://www.alteridem.net/2008/02/29/log4net-slides-and-example-code/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 21:03:34 +0000</pubDate>
		<dc:creator>Robert Prouse</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[log4net]]></category>

		<guid isPermaLink="false">http://www.alteridem.net/2008/02/29/log4net-slides-and-example-code/</guid>
		<description><![CDATA[I have been contacted people who cannot attend my Toronto Code Camp session on log4net tomorrow requesting a copy of my presentation and example code. I cannot find it posted on the Code Camp site, so here is a copy for anyone who is interested. The presentation is in PowerPoint 2007 and the example code [...]]]></description>
			<content:encoded><![CDATA[<p>I have been contacted people who cannot attend my <a href="http://www.torontocodecamp.net/">Toronto Code Camp</a> session on <a href="http://www.torontocodecamp.net/Sessions/tabid/55/CodecampId/1/SessionId/16/Default.aspx">log4net</a> tomorrow requesting a copy of my presentation and example code.  I cannot find it posted on the Code Camp site, so here is a copy for anyone who is interested.</p>
<p>The presentation is in PowerPoint 2007 and the example code is for Visual Studio 2008.  <b>update:</b> I have uploaded a PDF version of the presentation for those people without Office 2007.</p>
<ul>
<li><a href='http://www.alteridem.net/wp-content/uploads/2008/02/introduction-to-log4net_presentation.zip' title='Introduction to log4net Presentation'>Introduction to log4net Presentation</a></li>
<li><a href='http://www.alteridem.net/wp-content/uploads/2008/02/introductiontolog4net_code.zip' title='Introduction to log4net Example Code'>Introduction to log4net Example Code</a></li>
<li><a href='http://www.alteridem.net/wp-content/uploads/2008/03/introduction-to-log4net.pdf' title='Presentation in PDF Format'>Introduction to log4net Presentation in PDF Format</a></li>
</ul>
<p>If you are attending, I am looking forward to meeting you tomorrow at 9 AM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alteridem.net/2008/02/29/log4net-slides-and-example-code/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Speaking at Toronto Code Camp</title>
		<link>http://www.alteridem.net/2008/01/28/speaking-at-toronto-code-camp/</link>
		<comments>http://www.alteridem.net/2008/01/28/speaking-at-toronto-code-camp/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 04:14:08 +0000</pubDate>
		<dc:creator>Robert Prouse</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[log4net]]></category>

		<guid isPermaLink="false">http://www.alteridem.net/2008/01/28/speaking-at-toronto-code-camp/</guid>
		<description><![CDATA[I found out last week that I will be speaking at this year&#8217;s Toronto Code Camp on March 1st.&#160; I will be giving an Introduction to log4net from 9:00 AM to 10:15 AM. I will begin the session with an overview of the license, features and capabilities of log4net, including log levels, log hierarchies, logging [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alteridem.net/wp-content/uploads/2008/01/tcc-logosmall.gif"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="143" alt="tcc-logosmall" src="http://www.alteridem.net/wp-content/uploads/2008/01/tcc-logosmall-thumb.gif" width="142" align="right" border="0"></a> I found out last week that I will be speaking at this year&#8217;s <a href="http://www.torontocodecamp.net/">Toronto Code Camp</a> on March 1st.&nbsp; I will be giving an <a href="http://www.torontocodecamp.net/Sessions/tabid/55/CodecampId/1/SessionId/16/Default.aspx">Introduction to log4net</a> from 9:00 AM to 10:15 AM.</p>
<p>I will begin the session with an overview of the license, features and capabilities of <a href="http://logging.apache.org/log4net/">log4net</a>, including log levels, log hierarchies, logging contexts, configuration and filters.&nbsp;
<p>I will then dive into code by adding logging to a simple application. Next, I will configure the logging to output the logs to multiple destinations. I will end by discussing best practices for logging with <a href="http://logging.apache.org/log4net/">log4net</a> and answer questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alteridem.net/2008/01/28/speaking-at-toronto-code-camp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Writing An Appender For log4net</title>
		<link>http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/</link>
		<comments>http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/#comments</comments>
		<pubDate>Thu, 10 Jan 2008 14:38:58 +0000</pubDate>
		<dc:creator>Robert Prouse</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[log4net]]></category>

		<guid isPermaLink="false">http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/</guid>
		<description><![CDATA[In log4net speak, an appender is an output destination for a log such as a file, the console, a database or even email.&#160; log4net ships with so many appenders that most of us will never need to write our own.&#160; There are cases where you may find a need for your own appender, for example, [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://logging.apache.org/">log4net</a> speak, an appender is an output destination for a log such as a file, the console, a database or even email.&nbsp; <a href="http://logging.apache.org/">log4net</a> ships with so many appenders that most of us will never need to write our own.&nbsp; There are cases where you may find a need for your own appender, for example, you may want to log errors to your company&#8217;s bug tracking software.&nbsp; </p>
<p>In our case, we simply wanted error logs to pop up a message box with the error and location.&nbsp; We run this internally so that developers run into errors immediately during development and can break into the debugger to fix them.&nbsp; We found that logging to a file was too easy to ignore.</p>
<p><img height="232" alt="MessageBoxAppender" src="http://www.alteridem.net/wp-content/uploads/2008/01/messageboxappender.jpg" width="484" border="0"> </p>
<p>I was pleasantly surprised how easy it is to write a new appender, but there is very little information on the web, so I thought it would be best to give an example.</p>
<ol>
<li>Create a new Class Library project in Visual Studio.
<li>Add a reference to log4net. My appender also uses MessageBox, so I also added references to System.Drawing and System.Windows.Forms.
<li>Remove the default Class1.cs added to the project.
<li>Add your appender class. In my case, MessageBoxAppender.cs.
<li>You could implement the <a href="http://logging.apache.org/log4net/release/sdk/log4net.Appender.IAppender.html">log4net.Appender.IAppender</a> interface, but it is easiest to derive from <a href="http://logging.apache.org/log4net/release/sdk/log4net.Appender.AppenderSkeleton.html">log4net.Appender.AppenderSkeleton</a>, then most of the work is done for you.
<li>At a minimum, override the <a href="http://logging.apache.org/log4net/release/sdk/log4net.Appender.AppenderSkeleton.Append_overload_2.html">Append</a> method. This is where you do your work.
<li>If you are going to use the <a href="http://logging.apache.org/log4net/release/sdk/log4net.Appender.AppenderSkeleton.RenderLoggingEvent_overload_1.html">RenderLoggingEvent</a> method to create your logging message based on the configured layout (such as PatternLayout), override the <a href="http://logging.apache.org/log4net/release/sdk/log4net.Appender.AppenderSkeleton.RequiresLayout.html">RequiresLayout</a> property and return true.
<li>When you configure your appender, you must give the assembly qualified name for your appender.&nbsp; For example,</li>
</ol>
<p>&lt;appender name=&#8221;&#8230;&#8221; type=&#8221;MyNamespace.MyAppender, MyAssembly&#8221;&gt;</p>
<p>Here is the simplified code for the MessageBoxAppender that I wrote.</p>
<pre class="code"><span style="color: rgb(0,0,255)">using</span> System;
<span style="color: rgb(0,0,255)">using</span> System<span style="color: rgb(255,0,0)">.</span>Windows<span style="color: rgb(255,0,0)">.</span>Forms;
<span style="color: rgb(0,0,255)">using</span> System<span style="color: rgb(255,0,0)">.</span>Diagnostics;

<span style="color: rgb(0,0,255)">using</span> log4net<span style="color: rgb(255,0,0)">.</span>Core;
<span style="color: rgb(0,0,255)">using</span> log4net<span style="color: rgb(255,0,0)">.</span>Appender;
<span style="color: rgb(0,0,255)">
namespace</span> Alteridem<span style="color: rgb(255,0,0)">.</span>log4net
{
   <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> </span><span style="color: rgb(128,128,128)">&lt;summary&gt;
</span>   <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> Displays a MessageBox for all log messages.
</span>   <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> </span><span style="color: rgb(128,128,128)">&lt;/summary&gt;
</span>   <span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(43,145,175)">MessageBoxAppender</span> : <span style="color: rgb(43,145,175)">AppenderSkeleton
</span>   {
      <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> </span><span style="color: rgb(128,128,128)">&lt;summary&gt;
</span>      <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> Writes the logging event to a MessageBox
</span>      <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> </span><span style="color: rgb(128,128,128)">&lt;/summary&gt;</span>
<span style="color: rgb(0,0,255)">      override</span> <span style="color: rgb(0,0,255)">protected</span> <span style="color: rgb(0,0,255)">void</span> Append( <span style="color: rgb(43,145,175)">LoggingEvent</span> loggingEvent )
      {
         <span style="color: rgb(0,0,255)">string</span> title <span style="color: rgb(255,0,0)">=</span> <span style="color: rgb(0,0,255)">string</span><span style="color: rgb(255,0,0)">.</span>Format( <span style="color: rgb(163,21,21)">"{0} {1}"</span>,
            loggingEvent<span style="color: rgb(255,0,0)">.</span>Level<span style="color: rgb(255,0,0)">.</span>DisplayName,
            loggingEvent<span style="color: rgb(255,0,0)">.</span>LoggerName );

         <span style="color: rgb(0,0,255)">string</span> message <span style="color: rgb(255,0,0)">=</span> <span style="color: rgb(0,0,255)">string</span><span style="color: rgb(255,0,0)">.</span>Format(
            <span style="color: rgb(163,21,21)">"{0}{1}{1}{2}{1}{1}(Yes to continue, No to debug)"</span>,
            RenderLoggingEvent( loggingEvent ),
            <span style="color: rgb(43,145,175)">Environment</span><span style="color: rgb(255,0,0)">.</span>NewLine,
            loggingEvent<span style="color: rgb(255,0,0)">.</span>LocationInformation<span style="color: rgb(255,0,0)">.</span>FullInfo );

         <span style="color: rgb(43,145,175)">DialogResult</span> result <span style="color: rgb(255,0,0)">=</span> <span style="color: rgb(43,145,175)">MessageBox</span><span style="color: rgb(255,0,0)">.</span>Show( message, title,
            <span style="color: rgb(43,145,175)">MessageBoxButtons</span><span style="color: rgb(255,0,0)">.</span>YesNo );

         <span style="color: rgb(0,0,255)">if</span> ( result <span style="color: rgb(255,0,0)">==</span> <span style="color: rgb(43,145,175)">DialogResult</span><span style="color: rgb(255,0,0)">.</span>No )
         {
            <span style="color: rgb(43,145,175)">Debugger</span><span style="color: rgb(255,0,0)">.</span>Break();
         }
      }
      <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> </span><span style="color: rgb(128,128,128)">&lt;summary&gt;
</span>      <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> This appender requires a </span><span style="color: rgb(128,128,128)">&lt;see cref="Layout"/&gt;</span><span style="color: rgb(0,128,0)"> to be set.
</span>      <span style="color: rgb(128,128,128)">///</span><span style="color: rgb(0,128,0)"> </span><span style="color: rgb(128,128,128)">&lt;/summary&gt;
</span>      <span style="color: rgb(0,0,255)">override</span> <span style="color: rgb(0,0,255)">protected</span> <span style="color: rgb(0,0,255)">bool</span> RequiresLayout
      {
         <span style="color: rgb(0,0,255)">get</span> { <span style="color: rgb(0,0,255)">return</span> <span style="color: rgb(0,0,255)">true</span>; }
      }
   }
}</pre>
<p>There isn&#8217;t much to see here. I use the log level and the log name in the titlebar. I display the rendered message string and the calling location in the MessageBox and I break into the debugger if you press No.</p>
<p>Now, to configure this for your developers to see ERROR messages, the following configuration would work.</p>
<pre class="code"><span style="color: rgb(0,0,255)">&lt;?</span><span style="color: rgb(163,21,21)">xml</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">version</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">1.0</span>"<span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">encoding</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">utf-8</span>"<span style="color: rgb(0,0,255)"> ?&gt;
&lt;</span><span style="color: rgb(163,21,21)">configuration</span><span style="color: rgb(0,0,255)">&gt;
   &lt;</span><span style="color: rgb(163,21,21)">configSections</span><span style="color: rgb(0,0,255)">&gt;
      &lt;</span><span style="color: rgb(163,21,21)">section</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">log4net</span>"
<span style="color: rgb(0,0,255)">        </span><span style="color: rgb(255,0,0)">type</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">log4net.Config.Log4NetConfigurationSectionHandler, log4net</span>"<span style="color: rgb(0,0,255)"> /&gt;
   &lt;/</span><span style="color: rgb(163,21,21)">configSections</span><span style="color: rgb(0,0,255)">&gt;
   &lt;</span><span style="color: rgb(163,21,21)">log4net</span><span style="color: rgb(0,0,255)">&gt;
      &lt;</span><span style="color: rgb(163,21,21)">appender</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">MessageBoxAppender</span>"<span style="color: rgb(0,0,255)"></span>
            <span style="color: rgb(255,0,0)">type</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">Alertidem.log4net.MessageBoxAppender, log4netExtensions</span>"<span style="color: rgb(0,0,255)">&gt;
         &lt;</span><span style="color: rgb(163,21,21)">layout</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">type</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">log4net.Layout.PatternLayout</span>"<span style="color: rgb(0,0,255)">&gt;
            &lt;</span><span style="color: rgb(163,21,21)">ConversionPattern</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">%m</span>"<span style="color: rgb(0,0,255)"> /&gt;
         &lt;/</span><span style="color: rgb(163,21,21)">layout</span><span style="color: rgb(0,0,255)">&gt;
      &lt;/</span><span style="color: rgb(163,21,21)">appender</span><span style="color: rgb(0,0,255)">&gt;
      &lt;</span><span style="color: rgb(163,21,21)">root</span><span style="color: rgb(0,0,255)">&gt;
         &lt;</span><span style="color: rgb(163,21,21)">level</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">ERROR</span>"<span style="color: rgb(0,0,255)">/&gt;
         &lt;</span><span style="color: rgb(163,21,21)">appender-ref</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">ref</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">MessageBoxAppender</span>"<span style="color: rgb(0,0,255)"> /&gt;
      &lt;/</span><span style="color: rgb(163,21,21)">root</span><span style="color: rgb(0,0,255)">&gt;
   &lt;/</span><span style="color: rgb(163,21,21)">log4net</span><span style="color: rgb(0,0,255)">&gt;
&lt;/</span><span style="color: rgb(163,21,21)">configuration</span><span style="color: rgb(0,0,255)">&gt;</span></pre>
<p>The only thing to not here is that the log4netExtensions in the appender line is the assembly.</p>
<p>This should be enough to give you a basic framework to build whatever type of appender you want.&nbsp; Every time I delve into a new area of <a href="http://logging.apache.org/log4net/">log4net</a>, I am once again surprised how easy it is to work with and how well designed it is.&nbsp; If you aren&#8217;t using it, I would highly recommend it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
