请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#问题入口 ASP.NET问题入口

【C#问题提交】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接毕业设计】 面试-葵花宝典下载

官方一群:

官方二群:

查看: 3850|回复: 5

c#写日志类库【二尸兄】

  [复制链接]
  • TA的每日心情
    擦汗
    2014-8-13 09:17
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    3

    主题

    21

    帖子

    413

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    413
    QQ
    发表于 2014-9-22 10:42:52 | 显示全部楼层 |阅读模式

    马上加入IBC,查看更多教程

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    [C#] 纯文本查看 复制代码
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;
    using System.Runtime.CompilerServices;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    using System.Reflection;
    
    namespace CoreMes.Commom
    {
        public class SysLog
        {
            public delegate void ExceptionHandler(string title, string info, bool IsTerminating);
            private static bool bool_0;
            private static bool bool_1;
            private static string _logpath;
            private static string _timeformat = "HH:mm:ss,fff";
            private static string apppath = null;
            private static Queue<string> queue_log = new Queue<string>();
    
            public static event ExceptionHandler NewLog;
    
            public static void BindExceptionLog()
            {
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(SysLog.smethod_0);
                Application.ThreadException += new ThreadExceptionEventHandler(SysLog.smethod_1);
            }
    
            public static void RemoveExceptionLog()
            {
                AppDomain.CurrentDomain.UnhandledException -= new UnhandledExceptionEventHandler(SysLog.smethod_0);
                Application.ThreadException -= new ThreadExceptionEventHandler(SysLog.smethod_1);
            }
    
            private static void smethod_0(object sender, UnhandledExceptionEventArgs e)
            {
                StringBuilder builder = new StringBuilder();
                try
                {
                    Exception exception = null;
                    for (exception = (Exception)e.ExceptionObject; exception != null; exception = exception.InnerException)
                    {
                        builder.AppendFormat("\r\n{0}\r\n{1}\r\n{2}", exception.GetType().FullName, exception.Message, exception.StackTrace);
                    }
                }
                catch
                {
                    builder.Append("\r\n记录本条日志时也出现异常,导致捕获的信息不完整...");
                }
                smethod_2("发现应用程序域中未被捕获的异常", builder.ToString());
                bool_0 = true;
                while (queue_log.Count > 0)
                {
                    smethod_4(null);
                    Thread.Sleep(100);
                }
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            }
    
            private static void smethod_1(object sender, ThreadExceptionEventArgs e)
            {
                smethod_2("发现未被捕获的异常", string.Format("{0}\r\n{1}\r\n{2}", e.Exception.GetType().FullName, e.Exception.Message, e.Exception.StackTrace));
                bool_0 = true;
                while (queue_log.Count > 0)
                {
                    smethod_4(null);
                    Thread.Sleep(100);
                }
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            }
    
            private static void smethod_2(string string_2, string string_3)
            {
                smethod_3(DateTime.Now, string_2, string_3);
                smethod_5(string_2, string_3, true);
            }
    
            private static void smethod_3(DateTime dateTime_0, string string_2, string string_3)
            {
                if (!bool_0)
                {
                    string str;
                    Monitor.Enter(str = "Lock");
                    try
                    {
                        queue_log.Enqueue("[" + dateTime_0.ToString(TimeFormat) + "]  " + string_2 + "  " + string_3 + Environment.NewLine);
                    }
                    catch
                    {
                    }
                    finally
                    {
                        Monitor.Exit(str);
                    }
                }
            }
    
            private static void smethod_4(object object_0)
            {
                if (!bool_1)
                {
                    bool_1 = true;
                    string path = LogPath + @"\" + DateTime.Now.ToString("yyyyMMdd") + ".log";
                    try
                    {
                        using (StreamWriter writer = new StreamWriter(path, true, Encoding.Default))
                        {
                            while (queue_log.Count > 0)
                            {
                                string str2 = queue_log.Peek();
                                try
                                {
                                    writer.Write(str2);
                                    queue_log.Dequeue();
                                    continue;
                                }
                                catch
                                {
                                    break;
                                }
                            }
                            writer.Close();
                            writer.Dispose();
                        }
                    }
                    catch
                    {
                    }
                    bool_1 = false;
                }
            }
    
            private static void smethod_5(string string_2, string string_3, bool bool_2)
            {
                if (NewLog != null)
                {
                    NewLog(string_2, string_3, bool_2);
                }
            }
    
            public static string GetAppPath()
            {
                if (apppath == null)
                {
                    Assembly executingAssembly = Assembly.GetExecutingAssembly();
                    string location = executingAssembly.Location;
                    apppath = location.Remove(location.Length - executingAssembly.ManifestModule.Name.Length);
                }
                return apppath;
            }
    
           
            public static void WriteLog(string title, string info)
            {
                smethod_3(DateTime.Now, title, info);
                ThreadPool.QueueUserWorkItem(new WaitCallback(SysLog.smethod_4));
                smethod_5(title, info, false);
            }
    
            public static string LogPath
            {
                get
                {
                    if ((_logpath == null) || (_logpath.Length == 0))
                    {
                        _logpath = GetAppPath() + "SysLog";
                    }
                    if (!Directory.Exists(_logpath))
                    {
                        Directory.CreateDirectory(_logpath);
                    }
                    return _logpath;
                }
                set
                {
                    _logpath = value;
                }
            }
    
            public static string TimeFormat
            {
                get
                {
                    return _timeformat;
                }
                set
                {
                    _timeformat = value;
                }
            }
    
        }
    }
    

    功能就是把信息写到本文文件中。
    天生我材,必有用!
  • TA的每日心情
    开心
    2019-1-10 11:17
  • 签到天数: 377 天

    [LV.9]以坛为家II

    38

    主题

    103

    帖子

    1万

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    11621
    发表于 2014-9-22 10:45:12 | 显示全部楼层
    此帖仅作者可见

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-22 12:27
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    0

    主题

    48

    帖子

    736

    积分

    高级会员

    Rank: 4

    积分
    736
    发表于 2014-9-22 11:32:04 | 显示全部楼层
    此帖仅作者可见

    使用道具 举报

  • TA的每日心情
    开心
    2014-11-12 20:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    11

    帖子

    49

    积分

    新手上路

    Rank: 1

    积分
    49
    发表于 2014-11-12 19:58:24 | 显示全部楼层
    此帖仅作者可见

    使用道具 举报

  • TA的每日心情

    2015-5-6 11:08
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    0

    主题

    12

    帖子

    107

    积分

    注册会员

    Rank: 2

    积分
    107
    发表于 2014-12-29 10:48:46 | 显示全部楼层
    此帖仅作者可见

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    18

    积分

    新手上路

    Rank: 1

    积分
    18
    发表于 2016-8-23 14:38:02 | 显示全部楼层
    此帖仅作者可见

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则