logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Louis Ong <Louis....@illuminatedtechnologies.com>
Subject Can't setup log4net with .NET Compact Framework
Date Thu, 08 Dec 2005 22:39:49 GMT

I've been trying to setup log4net to work with the .NET Compact 
Framework, but have had no luck.

Here are the details:
log4net 1.2.9 beta
Visual Studio .NET 2003
.NET Framework 1.1
.NET Compact Framework 1.0 SP3
Smartphone 2003 SDK
Pocket PC 2003 SDK

I'm developing with C# for the Smartphone 2003/Pocket PC 2003 platforms, 
and decided to try log4net because I wanted console output but console 
statements don't work with the Smartphone emulator.

I took a look at the C# example for .NET Compact Framework 1.0 included 
with log4net, and copied its .config file (ConsoleApp.exe.config) over 
to a simple Smart Device Application GUI test project called SmartDeviceApp.

I made a few changes:
- turned on internal debugging (according to 
http://logging.apache.org/log4net/release/faq.html#internalDebug) to see 
if it would help.
- added the configSections element (according to 
because that was missing from the .config file I copied from the .NET CF 
- added an OutputDebugStringAppender, since I wanted to have the output 
show up in Visual Studio's Output window.

Here is what my SmartDeviceApp.exe.config file looks like:

<?xml version="1.0" encoding="utf-8" ?>

<!-- .NET application configuration file

     The .NET Compact Framework does not support application 
configuration files,
     but log4net supports using configuration files with similar names 
and structure,
     to store the log4net configuration.

<configuration >
    <!-- This section contains the log4net configuration settings -->
        <add key="log4net.Internal.Debug" value="true"/>
        <trace autoflush="true">
                    initializeData="C:\tmp\log4net.txt" />
        <section name="log4net" 
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        <!-- Define some output appenders -->
        <appender name="RollingLogFileAppender" 
            <param name="File" value="LQSS-SS-log.txt" />
            <param name="AppendToFile" value="true" />

            <param name="MaxSizeRollBackups" value="10" />
            <param name="MaximumFileSize" value="100" />
            <param name="RollingStyle" value="Size" />
            <param name="StaticLogFileName" value="true" />

            <layout type="log4net.Layout.PatternLayout">
                <param name="Header" value="[Header]\r\n"/>
                <param name="Footer" value="[Footer]\r\n"/>
                <param name="ConversionPattern" value="%d [%t] %-5p %c 
[%x] - %m%n" />
        <appender name="LogFileAppender" 
type="log4net.Appender.FileAppender" >
            <param name="File" value="log-file.txt" />
            <!-- Example using environment variables in params -->
            <!-- <param name="File" value="${TMP}\\log-file.txt" /> -->
            <param name="AppendToFile" value="true" />
            <!-- An alternate output encoding can be specified -->
            <!-- <param name="Encoding" value="unicodeFFFE" /> -->

            <layout type="log4net.Layout.PatternLayout">
                <param name="Header" value="[Header]\r\n"/>
                <param name="Footer" value="[Footer]\r\n"/>
                <param name="ConversionPattern" value="%d [%t] %-5p %c 
[%x] &lt;%X{auth}&gt; - %m%n" />
            <!-- Alternate layout using XML
            <layout type="log4net.Layout.XMLLayout" /> -->

            <appender name="MulticastAppender" 
type="log4net.Appender.UdpAppender" >
            <param name="Threshold" value="WARN" />
                <param name="RemoteAddress" value="" />
                <param name="RemotePort" value="8080" />
                <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%d [%t] %-5p %c 
[%x] - %m%n" />

         <appender name="ConsoleAppender" 
type="log4net.Appender.ConsoleAppender" >
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%d [%t] %-5p %c 
[%x] &lt;%X{auth}&gt; - %m%n" />
        <appender name="OutputDebugStringAppender" 
type="log4net.Appender.OutputDebugStringAppender" >
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date [%thread] 
%-5level %logger [%property{NDC}] - %message%newline" />

        <!-- Setup the root category, add the appenders and set the 
default level -->
            <level value="INFO" />
            <appender-ref ref="LogFileAppender" />
            <appender-ref ref="ConsoleAppender" />
            <appender-ref ref="MulticastAppender" />
            <appender-ref ref="OutputDebugStringAppender" />
            <!-- <appender-ref ref="A" /> -->

        <!-- Specify the level for some specific categories -->
        <logger name="SmartDeviceApp.Program">
            <!-- <appender-ref ref="B" /> -->
            <level value="ALL" />
            <appender-ref ref="RollingLogFileAppender" />
        <logger name="SmartDeviceApp.Program">
            <!-- <appender-ref ref="B" /> -->
            <level value="ALL" />
            <appender-ref ref="OutputDebugStringAppender" />


I've added this file to my SmartDeviceApp project, and set the Compile 
Action for the file to "Content", just like the .config file for the 
ConsoleApp example so that it will get copied over properly. I've also 
added the .NET Compact Framework release version of log4net.dll as a 

Here's how the code looks like in my test project:

using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using log4net;
using log4net.Config;

namespace SmartDeviceApp
    /// <summary>
    /// Summary description for Program.
    /// </summary>

    public class Program

        private static readonly ILog log = 

        ... some classes/methods ...

        static void Main()

            ... some calls ...

            Application.Run(new Form1());

I run the program and none of the logging statements appear. I have a 
strong suspicion that the XML .config file isn't even being processed at 
since the internal debugging section in the config file is supposed to 
create a log at C:\tmp\log4net.txt, but nothing gets generated when the 
program is run. I've also tried renaming the .config file to 
log4net.config and using the overloaded version of 
log4net.Config.XmlConfigurator.Configure() that takes a FileInfo, but no 
luck there either. I've also tried renaming the .config file to 
App.config, which results in Visual Studio complaining that "The file 
'app.config' could not be code-signed." and the project won't build. I 
feel like I've exhausted all options to get this simple logging to work. :)

Can anybody out there help? Thanks.

Louis Ong

View raw message