Click here to Skip to main content
15,893,564 members
Articles / Programming Languages / C#

AccountPlus

Rate me:
Please Sign up or sign in to vote.
4.47/5 (63 votes)
10 Sep 2009LGPL320 min read 242.1K   61.8K   209  
A Complete Account Management System
using log4net;
using log4net.Appender;
using log4net.Layout;
using log4net.Repository.Hierarchy;
using System.IO;
using System;
using AccountPlus.Configurations;


namespace AccountPlus.BusinessLogic
{
    public class Logger
    {
        private const string APPENDER_NAME = "ApplicationLogger";
        private static log4net.ILog log = null;

        /// <summary>
        /// Writes the stack trace into the Log file for the passed exception.
        /// </summary>
        /// <param name="ex">Exception to be written into Log file</param>
        public static void WriteLog(Exception ex)
        {
            if (ApplicationConfiguration.LoggingEnabled)
            {
                string fileName = GetFileName(FileType.Log);
                FileAppender fileAppender = CreateAppender(fileName);

                CreateLogger(fileAppender, APPENDER_NAME);
                log = LogManager.GetLogger(APPENDER_NAME);

                string stackTrace = GetStackTraceInfo();
                log.Info(stackTrace, ex);
            }
        }

        /// <summary>
        /// Write traceInfo to the trace file.
        /// </summary>
        /// <param name="traceInfo">Information needs to be traced</param>
        public static void WriteTrace(string traceInfo)
        {
            if (ApplicationConfiguration.TracingEnabled)
            {
                string fileName = GetFileName(FileType.Trace);
                FileAppender fileAppender = CreateAppender(fileName);

                CreateLogger(fileAppender, APPENDER_NAME);
                log = LogManager.GetLogger(APPENDER_NAME);
                log.Info(traceInfo + Environment.NewLine);
            }
        }

        /// <summary>
        /// Writes the information(s) to the trace file.
        /// </summary>
        /// <param name="formName">Screen name</param>
        /// <param name="traceInfo">Trace Information to be written into trace file</param>
        public static void WriteTrace(string formName, string traceInfo)
        {
            if (ApplicationConfiguration.TracingEnabled)
            {
                string fileName = GetFileName(FileType.Trace);
                FileAppender fileAppender = CreateAppender(fileName);

                CreateLogger(fileAppender, APPENDER_NAME);
                log = LogManager.GetLogger(APPENDER_NAME);

                string stackTrace = Environment.NewLine + "Screen/Form Name : " + formName + Environment.NewLine;
                stackTrace += "Method/ Action/ Routine Invoked : " + traceInfo + Environment.NewLine;
                stackTrace += "Start Time : " + DateTime.Now.ToString() + Environment.NewLine;
                stackTrace += "Username : " + SessionParameters.UserName + Environment.NewLine;
                log.Info(stackTrace);
            }
        }


        private static string GetStackTraceInfo()
        {
            string stackTraceInfo = Environment.NewLine;

            stackTraceInfo += "************************************************************" + Environment.NewLine;
            stackTraceInfo = (stackTraceInfo + "Username : ") + SessionParameters.UserName + Environment.NewLine;
            stackTraceInfo = (stackTraceInfo + "Date & Time : ") + DateTime.Now.ToString() + Environment.NewLine;
            stackTraceInfo += "************************************************************" + Environment.NewLine;

            return stackTraceInfo;
        }


        private enum FileType
        {
            Log,
            Trace
        }

        private static string GetFileName(FileType fileType)
        {
            string dirName = (fileType == Logger.FileType.Log ? Environment.CurrentDirectory + @"\Diagnostics\Log" : Environment.CurrentDirectory + @"\Diagnostics\Trace");

            if (!Directory.Exists(dirName))
                Directory.CreateDirectory(dirName);

            string fileName = ApplicationConfiguration.LogTraceSetting == ApplicationConfiguration.LogTraceType.DateWise ? DateTime.Now.ToString("dd-MMM-yyyy") + ".txt" : (fileType == FileType.Log ? "Log.txt" : "Trace.txt");                      
            return (dirName + "\\") + fileName;            
            
        }


        private static FileAppender CreateAppender(string fileName)
        {
            RollingFileAppender rollingFileAppender = new RollingFileAppender();
            FileAppender fileAppender = new FileAppender();
            PatternLayout patternLayOut = new PatternLayout();
            
            patternLayOut.ConversionPattern = "%d %m%n";
            patternLayOut.ActivateOptions();
            fileAppender.Layout = patternLayOut;
            fileAppender.AppendToFile = true;
            fileAppender.File = fileName;
            fileAppender.Name = APPENDER_NAME;
            fileAppender.ActivateOptions();

            return fileAppender;
        }

        private static void CreateLogger(FileAppender fileAppender, string loggerName)
        {
            log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetLoggerRepository();
            log4net.Repository.Hierarchy.Logger logger = (log4net.Repository.Hierarchy.Logger)hierarchy.GetLogger(APPENDER_NAME);
            logger.RemoveAllAppenders();
            logger.AddAppender(fileAppender);
            hierarchy.Configured = true;
        }

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Founder Aspirea Technologies Pvt Ltd
India India
• 8 years of experience in IT Industry as a Developer.
• Experience of End-To-End Software Development and Implementation (Entire SDLC i.e Software Development Life Cycle)
• Real time Exposure to Banking, Finance and Energy industry.
• Expertise in distributed application architecture as well as web based applications using Microsoft.NET platform.
• Expertise in database design, SQL programming and SQL performance tuning.
• Expertise in Web Services and WCF Services.
• Experience of Rich Internet Application using Adobe Flex.
• Experience in migration of legacy application to latest technology, migration of VB application to .NET.
• Knowledge of OOPS and Design Concepts.
• Expertise in Agile/ Scrum software development processes.

Specialties
• Languages\ Technologies-
.NET Framework 1.1/2.0/3.0/3.5, C#.NET, VB.NET, ASP.NET, VB6, AJAX, ASP.NET, Adobe Flex 3.0, Web Services, Windows Communication Foundation (WCF), LINQ, SQL Server, Oracle, MySql, MS Access, HTML, XML, JavaScript, C# Script, CSS and XSLT.

• Methodology/ Concepts-
OOPS, Data Structures, Design Concepts and Agile/ Scrum Software Development

Comments and Discussions