Skip to main content

Custom Logger in ASP.NET along with access permission to folder

This class can be used to create custom logger in ASP.NET application which includes the functionality of giving the permissions to the log folder where seperate log file will be created for each day.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.AccessControl;

namespace MyNamespace.Logger
{
    public class Logger
    {       
        public static void CreateLog(string strMessage, 
string moduleName, bool isError)
        {
            try
            {
                string strIsError = string.Empty;
                if (isError)
                    strIsError = "Error:";
                else
                    strIsError = "Information:";

                string fileUrl = GetFileUrl();
                string directoryName = System.IO.Path.GetDirectoryName(fileUrl);
                CreateFolder(directoryName);

                using (System.IO.StreamWriter sw = System.IO.File.AppendText(fileUrl))
                {
                    if (string.IsNullOrEmpty(moduleName) == false)
                        moduleName = "(" + moduleName + ")";

                    sw.WriteLine(strIsError + strMessage + "\t" + 
DateTime.Now.ToString() + "\t" + moduleName);
                }
            }
            catch (Exception)
            {
        throw ex;
            }
        }

        public static void Error(string message, Exception ex)
        {
            CreateLog(message + "\nStacktrace: " + ex.StackTrace, string.Empty, true);
        }

        public static void Info(string message, Exception ex)
        {
            CreateLog(message + "\nStacktrace: " + ex.StackTrace, string.Empty, false);
        }
       
        public static string GetFileUrl()
        {
            AppConfig objAppConfig = new AppConfig();
            string strPath = objAppConfig.LogFilePath;
            string strFileName = strPath.Substring(strPath.LastIndexOf('\\') + 1);
            if (!strFileName.EndsWith(".txt") || string.IsNullOrEmpty(strFileName))
            {
                strFileName = "Logs.txt";
                if (strPath.EndsWith("\\") == false)
                    strPath += "\\";
            }
            strFileName = GetFileNameFormat() + strFileName;

            return System.IO.Path.Combine(System.IO.Path.GetDirectoryName(strPath), strFileName);
        }

        private static string GetFileNameFormat()
        {
            string format = string.Empty;

            string month = DateTime.Now.Month.ToString();
            string day = DateTime.Now.Day.ToString();

            if (month.Length < 2)
                month = "0" + month;

            if (day.Length < 2)
                day = "0" + day;

            return DateTime.Now.Year.ToString() + "_" + month + "_" + day + "_";
        }

        private static bool CreateFolder(string folderPath)
        {
            try
            {
                SetAccessRightsToFolder(folderPath);
                Directory.CreateDirectory(folderPath);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public static void SetAccessRightsToFolder(string folderPath)
        {
            try
            {
                string machineName = System.Environment.MachineName;

                AddAccessRuleForFolder(folderPath, "Everyone");
                AddAccessRuleForFolder(folderPath, machineName + "\\Everyone");

                AddAccessRuleForFolder(folderPath, "ASPNET");
                AddAccessRuleForFolder(folderPath, machineName + "\\ASPNET");

                // NOTE: Even "NETWORK SERVICE" would be fine without "NT AUTHORITY\".
                AddAccessRuleForFolder(folderPath, "NETWORK SERVICE");
                AddAccessRuleForFolder(folderPath, machineName + "\\NETWORK SERVICE");
                AddAccessRuleForFolder(folderPath, "NT AUTHORITY\\NETWORK SERVICE");
            }
            catch (Exception)
            {
        throw ex;
            }
        }

        private static void AddAccessRuleForFolder(string folderPath, 
string groupOrUserName)
        {
            try
            {
                DirectoryInfo folderDirInfo = new DirectoryInfo(folderPath);
                DirectorySecurity dirSecurity = folderDirInfo.GetAccessControl();

                //Access Rights applies to Folder and SubFolders 
                dirSecurity.AddAccessRule(new FileSystemAccessRule
(groupOrUserName, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, 
PropagationFlags.None, AccessControlType.Allow));
                //Access Rights applies to files inside the folder
                dirSecurity.AddAccessRule(new FileSystemAccessRule
(groupOrUserName, FileSystemRights.FullControl, InheritanceFlags.ObjectInherit, 
PropagationFlags.None, AccessControlType.Allow));

                folderDirInfo.SetAccessControl(dirSecurity);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

Comments

Post a Comment

Popular posts from this blog

Permission audit report for site and all sub sites using PowerShell

Use below script to get Permission audit report for site and all sub sites using PowerShell, Add-PSSnapin "Microsoft.SharePoint.PowerShell" $URL="https://intranet.contoso.com/sales/mysite/"      $site = Get-SPSite $URL      #Write the Header to "Tab Separated Text File"         "Site Name`t  URL `t Group Name `t User Account `t User Name `t E-Mail" | out-file "E:\Ulhas\UsersandGroupsRpt.txt"          #Iterate through all Webs       foreach ($web in $site.AllWebs)       {         #Write the Header to "Tab Separated Text File"         "$($web.title) `t $($web.URL) `t  `t  `t `t " | out-file "E:\Ulhas\UsersandGroupsRpt.txt" -append          #Get all Groups and Iterate through            foreach ($group in $Web.groups)         ...

Populate people picker field with logged in user in SharePoint using JS

Please use below code to populate people picker in SharePoint online, <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> ExecuteOrDelayUntilScriptLoaded(function () { setTimeout(function () { SetUserFieldValue('AuthorName'); }, 1000); }, 'clientpeoplepicker.js'); //Set PeoplePicker Value function SetUserFieldValue(fieldName) { try{ var userAccountName = _spPageContextInfo.userLoginName; //PeoplePicker Object var peoplePicker = $("div[title='" + fieldName + "']"); //PeoplePicker ID var peoplePickerTopId = peoplePicker.attr('id'); //People PickerEditor var peoplePickerEditor = $("input[title='" + fieldName + "']"); //Set Value to Editor peoplePickerEditor.val(userAccountName); //Get Client PeoplePicker Dict var peoplePickerObject = SPClientPeoplePicke...

How Internet Bots Works?

What is bot? An internet robot or simply a bot is a software application that runs automated scripts on the web. How it works? Typically bots perform tasks that are simple and structurally repetitive at a much higher rate than what is possible for human being. So one single bot can handle queries(in whatever format like voice, chat OR Email) of hundreds of customers at the same time. Companies don't want their bots to sound too mechanical or business-like so we need to do a lot of cultural adaption in bots. Machine Learning and Artificial Intellingence (AI) form the underlying base of bots. For businesses to start their bots programme, they should collect a lot of customer related data. This fragmented data is used to populate the knowledge bank servers. Bots which understand behavior pattern will be able to pick "odd" transaction requests like humans do. Most of the Social Media platforms are using bots for most common activities. Below is the pictorial exp...