一个日志类 LogUtil

第一次自主封装Util类,尝试封装一个日志的操作类LogUtil,逻辑不复杂,也没调用那些复杂的类,只是简单的IO操作。
  1 using System;
  2 using System.IO;
  3 
  4 namespace Common
  5 {
  6     /// <summary>
  7     /// 日志类
  8     /// </summary>
  9     public static class LogUtil
 10     {
 11         /// <summary>
 12         /// 配置默认路径
 13         /// </summary>
 14         private static string defaultPath = System.Configuration.ConfigurationManager.AppSettings["logPath"];
 15 
 16         #region Exception异常日志
 17 
 18         /// <summary>
 19         /// 写异常日志,存放到默认路径
 20         /// </summary>
 21         /// <param name="ex">异常类</param>
 22         public static void WriteError(Exception ex)
 23         {
 24             WriteError(ex, defaultPath);
 25         }
 26 
 27         /// <summary>
 28         /// 写异常日志,存放到指定路径
 29         /// </summary>
 30         /// <param name="ex">异常类</param>
 31         /// <param name="path">日志存放路径</param>
 32         public static void WriteError(Exception ex, string path)
 33         {
 34             string errMsg = CreateErrorMeg(ex);
 35             WriteLog(errMsg, path, LogType.Error);
 36         }
 37 
 38         #endregion
 39 
 40         #region 普通日志
 41 
 42         /// <summary>
 43         /// 写普通日志,存放到默认路径,使用默认日志类型
 44         /// </summary>
 45         /// <param name="msg">日志内容</param>
 46         public static void WriteLog(string msg)
 47         {
 48             WriteLog(msg, LogType.Info);
 49         }
 50 
 51         /// <summary>
 52         /// 写普通日志,存放到默认路径,使用指定日志类型
 53         /// </summary>
 54         /// <param name="msg">日志内容</param>
 55         /// <param name="logType">日志类型</param>
 56         public static void WriteLog(string msg, LogType logType)
 57         {
 58             WriteLog(msg, defaultPath, logType);
 59         }
 60 
 61         /// <summary>
 62         /// 写普通日志,存放到指定路径,使用默认日志类型
 63         /// </summary>
 64         /// <param name="msg">日志内容</param>
 65         /// <param name="path">日志存放路径</param>
 66         public static void WriteLog(string msg, string path)
 67         {
 68             WriteLog(msg, path, LogType.Info);
 69         }
 70 
 71         /// <summary>
 72         /// 写普通日志,存放到指定路径,使用指定日志类型
 73         /// </summary>
 74         /// <param name="msg">日志内容</param>
 75         /// <param name="path">日志存放路径</param>
 76         /// <param name="logType">日志类型</param>
 77         public static void WriteLog(string msg, string path, LogType logType)
 78         {
 79             string fileName = path.Trim('\\')+"\\"+CreateFileName(logType);
 80             string logContext = FormatMsg(msg,logType);
 81             WriteFile(logContext, fileName);
 82         }
 83 
 84         #endregion
 85 
 86         #region 其他辅助方法
 87 
 88         /// <summary>
 89         /// 写日志到文件
 90         /// </summary>
 91         /// <param name="logContext">日志内容</param>
 92         /// <param name="fullName">文件名</param>
 93         private static void WriteFile(string logContext, string fullName)
 94         {
 95             FileStream fs = null;
 96             StreamWriter sw = null;
 97 
 98             int splitIndex = fullName.LastIndexOf('\\');
 99             if (splitIndex == -1) return;
100             string path = fullName.Substring(0, splitIndex);
101             
102             if (!Directory.Exists(path)) Directory.CreateDirectory(path);
103 
104             try
105             {
106                 if (!File.Exists(fullName)) fs = new FileStream(fullName, FileMode.CreateNew);
107                 else fs = new FileStream(fullName, FileMode.Append);
108 
109                 sw = new StreamWriter(fs);
110                 sw.WriteLine(logContext);
111             }
112             finally
113             {
114                 if (sw != null)
115                 {
116                     sw.Close();
117                     sw.Dispose();
118                 }
119                 if (fs != null)
120                 {
121                     fs.Close();
122                     fs.Dispose();
123                 }
124             }
125         }
126 
127         /// <summary>
128         /// 格式化日志,日志是默认类型
129         /// </summary>
130         /// <param name="msg">日志内容</param>
131         /// <returns>格式化后的日志</returns>
132         private static string FormatMsg(string msg)
133         {
134             return FormatMsg(msg, LogType.Info);
135         }
136 
137         /// <summary>
138         /// 格式化日志
139         /// </summary>
140         /// <param name="msg">日志内容</param>
141         /// <param name="logType">日志类型</param>
142         /// <returns>格式化后的日志</returns>
143         private static string FormatMsg(string msg, LogType logType)
144         {
145             string result;
146             string header = string.Format("[{0}][{1} {2}] ", logType.ToString(), DateTime.Now.ToShortDateString(),DateTime.Now.ToShortTimeString());
147             result= header + msg;
148             return result;
149         }
150 
151         /// <summary>
152         /// 从异常类中获取日志内容
153         /// </summary>
154         /// <param name="ex">异常类</param>
155         /// <returns>日志内容</returns>
156         private static string CreateErrorMeg(Exception ex)
157         {
158             string result = string.Empty;
159             result += ex.Message+"\r\n";
160             result += ex.StackTrace+"\r\n";
161             return result;
162         }
163 
164         /// <summary>
165         /// 生成日志文件名
166         /// </summary>
167         /// <param name="logType">日志类型</param>
168         /// <returns>日志文件名</returns>
169         private static string CreateFileName(LogType logType)
170         {
171             string result = DateTime.Now.ToString("yyyy-MM-dd");
172             if (logType != LogType.Info)
173                 result = logType.ToString() + result+".log";
174             return result;
175         }
176 
177         #endregion
178     }
179 
180     /// <summary>
181     /// 日志类型
182     /// </summary>
183     public enum LogType
184     { 
185         Error,
186         Info,
187         Option
188     }
189 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

WebDriver 的协议标准 W3C

https://github.com/Jason-Chen-2017/go-selenium

41320
来自专栏小灰灰

Java 动手写爬虫: 一、实现一个最简单爬虫

第一篇 准备写个爬虫, 可以怎么搞? 使用场景 先定义一个最简单的使用场景,给你一个url,把这个url中指定的内容爬下来,然后停止 一个待爬去的网址(有个地...

81560
来自专栏菩提树下的杨过

Asp.Net4.0/VS2010新变化(4):SEO的改进

asp.net4.0的webform中,对于Page对象新增加了二个属性:MetaKeywords,MetaDescription  ? 后端代码上,写法也更简...

18950
来自专栏C#

C#文件安全管理解析

    在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全...

439100
来自专栏技术博客

Entity Framework 简单查询

第一步还是先建立一个控制台的应用程序,然后通过Nuget添加Entity Framework。那么同时会给packages.config和App.config添...

13320
来自专栏技术小讲堂

ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析

什么是依赖注入     依赖,就是一个对象需要的另一个对象,比如说,这是我们通常定义的一个用来处理数据访问的存储,让我们用一个例子来解释,首先,定义一个领域模型...

63680
来自专栏大内老A

ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II

二、ASP.NET Runtime Pipeline(续ASP.NET Http Runtime Pipeline - Part I) 现在我们真正进入ASP....

21780
来自专栏bluesummer

StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行...

38790
来自专栏张善友的专栏

自定义Unity对象生命周期管理集成ADO.NET Entity Framework

在Unity中,从Unity 取得的实例为 Transient。如果你希望使用多线程方式,就需要在组成时使用lifecycle参数,这时候取出的组件就不再是同一...

37680
来自专栏技术博客

ExtJs四(ExtJs MVC登录窗口的调试)

继上一节中实现了验证码http://www.cnblogs.com/aehyok/archive/2013/04/19/3030212.html,现在我们可以进...

14920

扫码关注云+社区

领取腾讯云代金券