自制迷你日志类

  写网站程序的时候,都要把异常写入日志吧,比较常用的是Log4Net,不过我要求不高,只需要把异常和信息记在网站服务器的网站目录下就可以了,于是我自己写了一个。

    public static class Logger
    {
        private static readonly object Obj = new object();

        public static void Log(string title, string msg)
        {
            LogError(title, msg);
        }

        public static void Error(string title, Exception ex)
        {
            if (ex == null)
            {
                return;
            }

            var sb = new StringBuilder();
            sb.AppendLine(ex.Message).AppendLine(ex.StackTrace);

            foreach (IDictionary value in ex.Data.Values)
            {
                if (value != null)
                {
                    foreach (DictionaryEntry entry in value)
                    {
                        sb.Append("Key:").Append(entry.Key).Append(",Value:").AppendLine(entry.Value.ToString());
                    }
                }
            }

            if (ex.InnerException != null)
            {
                sb.Append("InnerMessage:")
                    .AppendLine(ex.InnerException.Message)
                    .Append("InnerStackTrace:")
                    .AppendLine(ex.InnerException.StackTrace);

                foreach (IDictionary value in ex.InnerException.Data.Values)
                {
                    if (value != null)
                    {
                        foreach (DictionaryEntry entry in value)
                        {
                            sb.Append("InnerKey:")
                                .Append(entry.Key)
                                .Append(",InnerValue:")
                                .AppendLine(entry.Value.ToString());
                        }
                    }
                }
            }

            LogError(title, sb.ToString());
        }

        private static void LogError(string title, string msg)
        {
            string filePath = Path.GetDirectoryName(HttpRuntime.AppDomainAppPath) + "\\log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";

            lock (Obj)
            {
                try
                {
                    File.AppendAllText(filePath, string.Format("{0:HH:mm:ss}:{1}:{2}\r\n", DateTime.Now, title, msg));
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }
    }

  记录普通信息没什么难的,记录异常的话就要选择记录哪些信息了,这里我没把Source,HelpLink和TargetSite记录下来,因为我感觉他们没什么用,这里唯一难点的就是写日志加锁,为何要加锁呢,因为同一文件同一时间只能被一个进行写入呀,把日志类搞成静态类也是出于这个考虑的。

时间: 2024-10-24 04:42:33

自制迷你日志类的相关文章

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