文档章节

C#简单日志记录

Hank-Yu
 Hank-Yu
发布于 2015/06/16 13:45
字数 649
阅读 137
收藏 0

话不多说直接上代码,下面分别是Logger类和简单的winform演示代码:

Logger类:

    public class Logger
    {
        private static string _errorLog;//错误日志路径
        private static string _succLog;//正确日志路径
        private static readonly object Locker = new object();//线程锁
        
        /// <summary>
        /// 创建日志文件
        /// </summary>
        /// <param name="str">日志文件类型:dr=导入,fb=发布不同的功能可以写入不同的日志文件中</param>
        public static void CreateLog(string str)
        {
            var errorpath = Application.StartupPath + "\\log\\errorlog";//错误日志文件夹路径
            var succpath = Application.StartupPath + "\\log\\succlog";//成功日志文件夹路径
            if (!Directory.Exists(errorpath))
            {
                Directory.CreateDirectory(errorpath);//创建错误日志文件夹
            }
            if (!Directory.Exists(succpath))
            {
                Directory.CreateDirectory(succpath);//创建正确日志文件夹
            }
            //程序启动创建一个单独的日子文件[*.log],方便查找
            _errorLog = errorpath + "\\" + str + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log";
            _succLog = succpath + "\\" + str + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log";
        }
        
        /// <summary>
        /// 写日志信息
        /// </summary>
        /// <param name="flag">true=正确日志,false=错误日志</param>
        /// <param name="message">日志信息</param>
        public static void WriteLogInfo(bool flag, string message)
        {
            lock (Locker) //为了线程安全,加入线程锁
            {
                if (flag)//正确日志
                {
                    using (var sw = new StreamWriter(_succLog, true, Encoding.Default))
                    {
                        if (message != "")
                        {
                            sw.WriteLine(DateTime.Now.ToLocalTime() + " : " + message);//每次写一行
                        }
                    }
                }
                else//错误日志
                {
                    using (var sw = new StreamWriter(_errorLog, true, Encoding.Default))
                    {
                        if (message != "")
                        {
                            sw.WriteLine(DateTime.Now.ToLocalTime() + " : " + message);//每次写一行
                        }
                    }
                }
            }
        }
    }

winform演示程序:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Logger.CreateLog("ce");
        }
        /// <summary>
        /// 测试按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btStartTest_Click(object sender, EventArgs e)
        {
            var result = GetNumber(3);
            if (result == -1)
            {
                MessageBox.Show("索引越界!");
                Logger.WriteLogInfo(false, "索引越界!");
            }
            else
            {
                MessageBox.Show("数组的第4个值为:" + result);
                Logger.WriteLogInfo(true, "索引越界!");
            }
        }
        /// <summary>
        /// 取数组值函数
        /// </summary>
        /// <param name="index">索引值</param>
        /// <returns>返回值:-1=索引异常</returns>
        static int GetNumber(int index)
        {
            int[] nums = { 300, 600, 900 };
            try
            {
                if (index >= nums.Length)
                {
                    throw new IndexOutOfRangeException();
                }
                return nums[index];
            }
            catch (Exception)
            {
                return -1;
            }
        }
    }

运行结果:

这里的Logger可以根据自己的业务需要变更一下,我实际使用的时候也稍微有点不同。

 

© 著作权归作者所有

共有 人打赏支持
Hank-Yu
粉丝 0
博文 1
码字总数 649
作品 0
海淀
程序员
私信 提问
一个简单的 C# 异步日志记录器

本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! Clearcove.Logging是一个非常简单的日志库,旨在通过直接许可条款满足大多数日志记录需求。 介绍 ...

码农网
04/13
0
0
C#文本日志类

文本日志类 说明 本类适合C#项目在本地记录文本文件,日志文件已经按照年月/日/类型分文件夹存储,所以不会产生单个大文件。当然,如果项目中有记录大量日志的逻辑,那么产生单个大的日志文件...

冬天之雪
2016/09/26
52
0
简短介绍 C# 6 的新特性

几周前我在不同的地方读到了有关C#6的一些新特性。我就决定把它们都收集到一起,如果你还没有读过,就可以一次性把它们都过一遍。它们中的一些可能不会如预期那样神奇,但那也只是目前的更新...

oschina
2014/08/19
13K
53
在C#中使用装饰器模式和扩展方法实现Fluent Interface

在C#中使用装饰器模式和扩展方法实现Fluent Interface 背景知识 Fluent Interface是一种通过连续的方法调用以完成特定逻辑处理的API实现方式,在代码中引入Fluent Interface不仅能够提高开发...

tantexian
2016/06/12
10
0
C# receive 接收的字符串 对比不相等的问题

背景:   最近写了一个C/S架构的 C# Socket 通讯项目,服务端,客户端弄通了之后,客户端发送给服务端后,服务端回复一个字符串告诉客户端确认收到了。问题就在这。 问题:   一开始,我...

引歌
12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C#匿名委托

list自定义排序 //list自定义排序public static List<string> sortList(List<string> m_str,string splitStr) //a b表示列表中的元素{String[] strArray=m_str.ToArray();......

青衣霓裳
12分钟前
0
0
Python 之父退位后,会有新任终身仁慈独裁者吗?怎么产生?

随着 Python 之父 Guido van Rossum 逐步卸任 BDFL,Python(CPython)的未来之路牵动了万千开发者的心。没了首领,Python 今后的发展会怎么样?社区将如何运作?谁来领导 Python 这门语言和...

编辑部的故事
17分钟前
6
0
我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

linux-tao
今天
20
0
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file

前段时间打包了一个数据库镜像,但是启动容器之后发现报错 ··· ··· MySQL: Starting MySQL….. ERROR! The server quit without updating PID file 查了网络上的解决方案比较全,遂转帖...

blackfoxya
今天
6
0
C4C销售订单行项目价格维护方法

需求很简单,能够创建销售订单,在行项目里添加产品,带出价格来,同时把总价显示在销售订单抬头区域。 如下图所示: 下面是具体配置。 Business Configuration里,点击Sales Order的配置: ...

JerryWang_SAP
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部