Yes. That's straightforward in the documentation. I finally solved the problem. I compiled my app with the source-compiled debug version of log4net and stepped through their code. The XmlConfigurator calls ParseAppender for each appender it finds in the config file. That, in turn, calls Utils.SystemInfo.GetTypeFromString() which was exceptioning out in the else clause on Type.GetType(). It was mismatching on the Assembly with 'PUBLIC KEY TOKEN'. Took me a little while (Forest/Trees thing).
Clarification:
When you specify the assembly in the config file, the format is 'class, assembly'. Again, when I had my appender dll added as a reference in my app's Visual Studio project, there was no issue - just put the assembly name, e.g., my assembly is FooAppender.dll, with a class BarCo.FooLogger so the element in my config would be 'BarCo.FooLogger, FooAppender'
Solution:
I needed to put as much of the standard assembly specifiers as needed. So what I ended up was:
'BarCo.FooLogger, FooAppender Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
Of course, fill in the attributes to match your actual assembly, i.e., if you have a different token or culture.
What a pain. Once again, a little bit of clarification on the documentation would go a long way in saving people time.
QUOTE(masteryee @ 8 Jun, 2009 - 08:04 AM)

Have you tried using the appender-ref tag?
xml
<log4net>
<appender name="Appender1" />
<appender name="Appender2" />
<root>
<appender-ref ref="Appender1" />
<appender-ref ref="Appender2"/>
</root>
</log4net>