Using Apache log4net in C#/.NET

Here are the steps;
  • Download the latest version of log4net library from Apache web site and add reference of log4net.dll in to your project.
  • Go to your project's AssemblyInfo.cs file and add below line at the end of it.                       [assembly: log4net.Config.XmlConfigurator(Watch = true)]
  • Go to your project's Web.config file and add these in it, just below <configuration> tag.
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=, Culture=neutral, PublicKeyToken=1b44e1d426115821" />

  <!-- Log4net Logging Setup -->
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
      <file value="c:\\mylogfile.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="FATAL" />

      <level value="DEBUG"/>
      <appender-ref ref="FileAppender"/>

    <add key="filePath" value="C:\folder_name\temp\"/>

  • Code you program. Here is my sample web service running an .exe and also creating its own log data.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
using System.Diagnostics;
using System.Security.Principal;
using System.Security;
using System.Runtime.InteropServices;
using System.Configuration;
using System.Web.Configuration;
using log4net;

namespace SampleWS
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    // [System.Web.Script.Services.ScriptService]
    public class SampleWebService : System.Web.Services.WebService
        ILog log = log4net.LogManager.GetLogger(typeof(SampleWebService));

        public bool SampleWorker(string filePath)
            //.exe dosyası Web.config dosyası dizini seviyesine kopyalanmalıdır.
            string htm = ".htm";

            #region [ Notlar ]
            //ILog log = log4net.LogManager.GetLogger(typeof(SampleWebService));
            //log.Debug("test debug message");
            //log.Warn("test warn message");
            //log.Error("test error message");
            //log.Fatal("test fatal message");

                string iFileName = Path.GetFileName(filePath);
                string oFileName = iFileName.Substring(0, iFileName.IndexOf(htm));
                //string htmFilePath = filePath.Substring(0, filePath.IndexOf(iFileName));
                string htmFilePath = ConfigurationManager.AppSettings["filePath"].ToString();
                string xlsFilePath = ConfigurationManager.AppSettings["filePath"].ToString();

                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.CreateNoWindow = true;
                startInfo.UseShellExecute = false;
                startInfo.WorkingDirectory = xlsFilePath;
                startInfo.FileName = Server.MapPath("test.exe");
                startInfo.RedirectStandardError = true;
                startInfo.RedirectStandardOutput = true;
                startInfo.Arguments = "-i:" + htmFilePath + iFileName + " -o:" + xlsFilePath + oFileName + ".xls";

                //string htmlFilePathControl = Path.GetFullPath(filePath);
                string htmlFilePathControl = htmFilePath + iFileName;
                string xlsFilePathControl = xlsFilePath + oFileName + ".xls";

                if (File.Exists(htmlFilePathControl))
                    log.Info(iFileName + " isimli dosya bulundu");
                        using (Process process = Process.Start(startInfo))
                            process.StartInfo.RedirectStandardError = true;
                            process.StartInfo.RedirectStandardOutput = true;
                            process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
                            process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
                            log.Info("test.exe calistirildi");

                            if (process.ExitCode == 0)
                                log.Info(oFileName + "isimli .xls olusturuldu");
                                return File.Exists(xlsFilePathControl); //Dosya olustuysa true doner
                                //string output = process.StandardOutput.ReadToEnd();
                                log.Error(oFileName + ".xls olusturulamadi");
                                return false;
                    catch (Exception ex)
                        log.Error(oFileName + ".xls olusturulamadi. Hata: " + ex.Message);
                        return false;

                    log.Error(iFileName + " isimli dosya bulunamadi");
                    return false;

            catch (Exception e)
                log.Error("test.exe calismasi oncesinde hata: " + e.Message);
                return false;


        void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)

        void process_OutputDataReceived(object sender, DataReceivedEventArgs e)


  • And here is how the log file looks like;

That's all! Happy coding!


  1. This is even better than log4net:


Post a Comment

Popular posts from this blog

Solution for the fault: "System.Diagnostics.Process.Start is not working on IIS, but working on ASP.NET Development Server"

Solution for "Can not obtain Oracle client information from registry"