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.
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
  </configSections>

  <!-- Log4net Logging Setup -->
  <log4net>
    <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" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="FATAL" />
      </filter>
    </appender>

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

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

  • 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 = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 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));

        [WebMethod]
        public bool SampleWorker(string filePath)
        {
            //.exe dosyası Web.config dosyası dizini seviyesine kopyalanmalıdır.
            string htm = ".htm";
            log4net.Config.BasicConfigurator.Configure();

            #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");
            //Console.ReadLine();
            #endregion

            try
            {
                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");
                    try
                    {
                        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);
                            process.BeginOutputReadLine();
                            process.BeginErrorReadLine();
                            log.Info("test.exe calistirildi");
                            process.WaitForExit();

                            if (process.ExitCode == 0)
                            {
                                process.Close();
                                log.Info(oFileName + "isimli .xls olusturuldu");
                                return File.Exists(xlsFilePathControl); //Dosya olustuysa true doner
                            }
                            else
                            {
                                //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;
                        //throw;
                    }

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

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

        }

        void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            log.Error(e.Data);
        }

        void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            log.Error(e.Data);
        }

    }
}

  • And here is how the log file looks like;



That's all! Happy coding!

Comments

  1. This is even better than log4net:
    http://www.kellermansoftware.com/p-14-net-logging-library.aspx

    ReplyDelete

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"