Skip to main content

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

Popular posts from this blog

How to fix Git push error: "RPC failed; curl 56 HTTP/2 stream 7 was reset send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly"

Problem Today I saw the following problem when I tried to push my changes to a Git server after doing some work for upgrading an Umbraco v7 project to v8.18.8.  Possible reasons After some investigations, it seems like this could be because of the following reasons; Git is not happy with the amount of changes that are being pushed into the server.  There are possible limitations on the server about the size/amount of files that you can push. Your internet connection is not good and stable enough. Your Git client's version is old. Solution options For me, the easiest option was connecting to another Wifi and trying again. Apparently, this option helped quite a few people, so it is worth giving it a try. Unfortunately, it didn't work for me. A bad internet connection wasn't an option for me either, as my internet is pretty fast (500 Mbps). Similarly, my Git client version was the latest version (git version 2.41.0.windows.3).  On StackOverflow, there were a lot of recommend...

How to use JQuery Ajax Methods for Async ASP.NET MVC Action Methods

Making repeatedly calls to async methods can be a nightmare. In this case, it makes sense to use 2 ajax methods, instead of one. Here is a simple solution to overcome this problem. See that  ajaxcalls   is emptied after the success response for the first ajax call and then the second ajax method is used to make one single call to the async action method. Hope it helps. View: @section Scripts{     < script type ="text/javascript">         var smartDebitObject = new Object();         smartDebitObject.MembershipNumber = $( "#MembershipNumber" ).val();         smartDebitObject.ProfileId = $( "#ProfileId" ).val();         smartDebitObject.FirstName = $( "#FirstName" ).val();         smartDebitObject.LastName = $( "#LastName" ).val();     ...

How to fix "Microsoft SQL Error SQL71564: Error validating element [USERNAME]: The element [USERNAME] has been orphaned from its login and cannot be deployed."

I needed to export a database in BACPAC format today in order to restore it somewhere else, and I encountered the following error. To resolve this issue, I deleted all of the users mentioned in the error log. After successfully creating the BACPAC file, I used it to create a new database with no problems. Error: TITLE: Microsoft SQL Server Management Studio ------------------------------ One or more unsupported elements were found in the schema used as part of a data package. Error SQL71564: Error validating element [USER1]: The element [USER1] has been orphaned from its login and cannot be deployed. Error SQL71564: Error validating element [USER2]: The element [USER2] has been orphaned from its login and cannot be deployed. Error SQL71564: Error validating element [USER3]: The element [USER3] has been orphaned from its login and cannot be deployed. Error SQL71564: Error validating element [USER4]: The element [USER4] has been orphaned from its login and cannot be deployed. Error SQL71...