zoukankan      html  css  js  c++  java
  • C# 添加Log文件、记录Log

    其实在平时的开发过程中都是不怎么写log的,觉得在debug中能看得一清二楚。同事小姐姐前辈,一直就我不写log进行批判,但是我从来不改,哈哈。也算是遇到报应了,在最近一个工程里,本地调试一切正常,到了服务器上就不好使,百般无奈写了人生第一个log,也记录下来,方便以后查漏补缺,与大家共勉。

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    首先提供一个范本,着急用的童鞋可以直接下载,然后跳过2,直接看1和3。

    Logger.cs:  https://pan.baidu.com/s/1dZHxuQ

    LoggerEnum.cs:  https://pan.baidu.com/s/1i7gUEZr

    1.创建文件:

      按照以下文件目录建好,也可以自行安排,无关紧要。

      

      主要用到的就是Logger.cs,LoggerEnum.cs就是记录log的type的枚举。

    2.填充内容:

      根据自己的项目改一下namespace就好了

      1)首先LoggerEnum.cs 类型枚举,没啥好讲的

    namespace ICUValidationService.Log
    {
        public enum LogType
        {
            All,
            Information,
            Debug,
            Success,
            Failure,
            Warning,
            Error
        }
    }

      2)Logger.cs

    using System;
    using System.IO;
    using System.Reflection;
    
    namespace ICUValidationService.Log
    {
        public class Logger
        {
            #region Instance
            private static object logLock;
    
            private static Logger _instance;
    
            private static string logFileName;
            private Logger() { }
    
            /// <summary>
            /// Logger instance
            /// </summary>
            public static Logger Instance
            {
                get
                {
                    if (_instance == null)
                    {
                        _instance = new Logger();
                        logLock = new object();
                        logFileName = Guid.NewGuid() + ".log";
                    }
                    return _instance;
                }
            }
            #endregion
    
            /// <summary>
            /// Write log to log file
            /// </summary>
            /// <param name="logContent">Log content</param>
            /// <param name="logType">Log type</param>
            public void WriteLog(string logContent, LogType logType = LogType.Information,string fileName =null)
            {
                try
                {
                    string basePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                    basePath = @"C:APILogs";
                    if (!Directory.Exists(basePath + "\Log"))
                    {
                        Directory.CreateDirectory(basePath + "\Log");
                    }
    
                    string dataString = DateTime.Now.ToString("yyyy-MM-dd");
                    if (!Directory.Exists(basePath + "\Log\" + dataString))
                    {
                        Directory.CreateDirectory(basePath + "\Log\" + dataString);
                    }
    
                    string[] logText = new string[] { DateTime.Now.ToString("hh:mm:ss") + ": " + logType.ToString() + ": " + logContent };
                    if (!string.IsNullOrEmpty(fileName))
                    {
                        fileName = fileName +"_"+ logFileName;
                    }
                    else
                    {
                        fileName = logFileName;
                    }
    
                    lock (logLock)
                    {
                        File.AppendAllLines(basePath + "\Log\" + dataString + "\" + fileName, logText);
                    }
                }
                catch (Exception) { }
            }
    
            /// <summary>
            /// Write exception to log file
            /// </summary>
            /// <param name="exception">Exception</param>
            public void WriteException(Exception exception,string specialText= null)
            {
                if (exception != null)
                {
                    Type exceptionType = exception.GetType();
                    string text = string.Empty;
                    if (!string.IsNullOrEmpty(specialText))
                    {
                        text = text + specialText + Environment.NewLine;
                    }
                    text = "Exception: " + exceptionType.Name + Environment.NewLine;
                    text += "               " + "Message: " + exception.Message + Environment.NewLine;
                    text += "               " + "Source: " + exception.Source + Environment.NewLine;
                    text += "               " + "StackTrace: " + exception.StackTrace + Environment.NewLine;
                    WriteLog(text, LogType.Error);
                }
            }
        }
    }

      简单而言,就两个方法,一个写简单信息(WriteLog),一个写error信息(WriteException)。WriteLog记录log,WriteException调用WriteLog记录log。

    3.调用

      这个是必须的,不然找不到

    using ICUValidationService.Log;
     try
                {
              Logger.Instance.WriteLog("Start");           //do something
              Logger.Instance.WriteLog("End");
                }
                catch (Exception ex)
                {
                    Logger.Instance.WriteException(ex);
                }

    记录的log如下:

    当然除了特殊需求,或者调试,一般咱们只在catch中记录就可以了

    MrNou
  • 相关阅读:
    第六章
    第七章
    第五章
    第四章
    第三章
    第二章
    第一章
    Android深度探索——第十章读书笔记及心得
    Android深度探索——第九章读书笔记及心得
    Android深度探索——第八章读书笔记及心得
  • 原文地址:https://www.cnblogs.com/yangsirc/p/8295129.html
Copyright © 2011-2022 走看看