C#日志类

日志在我们日常程序中是非常容易触及到的东西,当然我们在程序中可以用很多种方式来记录。

在C#中我们可以用log4net.dll,也可以利用IO将记录写入文件。


作用:

  1. 记录用户的操作
  2. 记录程序中的异常,我们可以捕获到很多有用的东西
  3. 为数据分析提供依据

这篇文章给了我们写日志非常好的建议:http://blog.jobbole.com/52018/



下面是我在项目经常用到的一个log类,

 1 /// <summary>
 2 ///Log 的摘要说明
 3 /// </summary>
 4 public class Log
 5 {
 6     private string PathName;
 7     private string FileName;
 8
 9     /// <summary>
10     /// 构造 Log
11     /// </summary>
12     /// <param name="pathname">相对于网站根目录 App_Log 目录的相对路径,如: System, 就相当于 ~/App_Log/System/</param>
13     public Log(string pathname)
14     {
15         if (String.IsNullOrEmpty(pathname))
16         {
17             throw new Exception("没有初始化 Log 类的 PathName 变量");
18         }
19
20         PathName = System.AppDomain.CurrentDomain.BaseDirectory + "App_Log/" + pathname;
21
22         if (!Directory.Exists(PathName))
23         {
24             try
25             {
26                 Directory.CreateDirectory(PathName);
27             }
28             catch { }
29         }
30
31         if (!Directory.Exists(PathName))
32         {
33             PathName = System.AppDomain.CurrentDomain.BaseDirectory + "App_Log";
34
35             if (!Directory.Exists(PathName))
36             {
37                 try
38                 {
39                     Directory.CreateDirectory(PathName);
40                 }
41                 catch { }
42             }
43
44             if (!Directory.Exists(PathName))
45             {
46                 PathName = System.AppDomain.CurrentDomain.BaseDirectory;
47             }
48         }
49
50         FileName = PathName + "/" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
51     }
52
53     public void Write(string Message)
54     {
55         if (String.IsNullOrEmpty(FileName))
56         {
57             return;
58         }
59
60         using (FileStream fs = new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.Write))
61         {
62             StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GBK"));
63
64             try
65             {
66                 writer.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + System.DateTime.Now.Millisecond.ToString() + "\t\t" + Message + "\r\n");
67             }
68             catch { }
69
70             writer.Close();
71         }
72     }
73
74     public void WriteIni(string Message)
75     {
76         WriteIni("Log", Message);
77     }
78
79     public void WriteIni(string Section, string Message)
80     {
81         if (String.IsNullOrEmpty(FileName))
82         {
83             return;
84         }
85
86         Shove._IO.IniFile ini = new Shove._IO.IniFile(FileName);
87
88         ini.Write(Section, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + System.DateTime.Now.Millisecond.ToString(), Message);
89     }
90 }

当然我们也可以利用log4net.dll来配置,将一些记录写入到数据库中

demo地址 http://files.cnblogs.com/files/QDF-/log4_demo.rar

时间: 2024-11-06 03:51:42

C#日志类的相关文章

c++ 日志类 线程安全+缓存

根据上一次的测试,有缓存的日志类性能会更好.用到了time.h类函数,所以在linux下就要改动一下了,windows环境下写的. 思路采用(参照muduo库的日志,不过认为他线程不安全,和没用缓存,就改造了下) 1.有一个总的缓存,logboss,为一个恶汉模式的单例类,指针对象为智能指针,析构函数讲缓存写入文件. 2.有一个logger类,作为临时缓存,析构函数,将里面的缓存写入总缓存(在总缓存写入的时候加锁).如果缓存超过一定限度,就将前面的缓存写入文件先. void LogBoss::a

怎么样做好日志类的报警监控

上一篇文章写了普通数字类型类型的监控报警,本文谈一下怎么样做好日志类的监控和报警 一.日志类报警的特点 1.接受人员希望直接看到日志的内容: 2.对应技术栈涉及比较广的系统,,一个问题会引发不同主机上面不同系统同时产生日志.举例:openstack 的nova在保存快照时出错,会引起nova-api,galnce-api,horizen同时产生错误日志. 二.遇到的痛点: 1.有很多人想随时查看日志,不同的人想要查看不同的日志: 2.日志类的报警,不适合用微信直接发送内容,原因一是转义麻烦,二是

C++开源日志类

今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge.net/projects/log4cplus/files/log4cplus-stable/1.1.0 2.log4cxx 下载地址:http://logging.apache.org/log4cxx/download.html (log4cxx 是由JAVA实现的 log4j 开源的,用C++实

简易的日志类

打日志是开发不可或缺的功能, 它经常比断点好用, 并且可用性更广. 在很久以前, 我总习惯性的printf, cout, 把日志打印在控制台. 直到我发现, 这除了针对性的看日志, 并没有什么乱用. 你的程序提交到测试那里, 程序出现意外, 你不能指望测试给你提供崩溃当时的日志, 也不能及时赶到现场, 发动写轮眼记下原因. 所以, 日志除了打印在屏幕, 还要写日到文件... 1 // 日志写入. 2 class Log { 3 public: 4 // 日志结束符. 5 class End {}

C#日志类记录

每个程序都要和日志打交道.程序日志的质量直接影响了排除问题的难度.普通程序调试信息直接输出控制台,复杂程序则通过文本,xml等方式记录运行时的调试信息.在C#中Diagnostics命名空间下有一个微软提供的专门用于记录信息的TraceSource类.TraceSource的使用方法很简单,只需要4行代码 TraceSource ts = new TraceSource("Code.Main", SourceLevels.All); ts.Listeners.Add(new Conso

WorldWind源码剖析系列:日志类Log

Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs : EventArgs//日志事件参数 { public int level; public string category; public string message; public LogEventArgs(int _l, string _c, string _m) { level = _l

关于日志类Log4j的使用

log4j 的配置 1 #下面定义日志输出级别是 INFO,并且配置了2个输出目的地,一个是A3,一个是console 2 3 log4j.rootLogger = INFO,A3,CONSOLE 4 5 #日志最低的输出级别 6 log4j.appender.A3.Threshold=INFO 7 log4j.appender.A3.encoding=UTF-8 8 #每天产生一个文件DailyRollingFileAppender 9 log4j.appender.A3 = org.apac

android Loger日志类(获取内置sd卡)

Android手机自带内部存储路径的获取 原文地址:http://my.oschina.net/liucundong/blog/288183 直接贴代码: public static String getExternalSdCardPath() { if (SDCardUtils.isSDCardEnable()) { File sdCardFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath());

日志类(三)TLog ①

功能未完善. 待续. 1 TLogThread = class(TThread) 2 private 3 FInterval: Integer; 4 FLogServers: TList; 5 FEvent: TEvent; 6 procedure SetInterval(pvInterval: Integer); 7 protected 8 property Interval: Integer read FInterval write SetInterval; 9 property LogSe

分享一个PHP调试日志类

分享一个我自己用的在 WordPress 开发中用得到的一个调试日志类. <?php /** * @author: suifengtec coolwp.com * @date: 2013-02-03 09:55:55 * @last Modified by: suifengtec coolwp.com * @last Modified time: 2015-07-12 18:40:02 */ if(function_exists('add_action')){ defined('ABSPATH'