文档章节

C#简单日志记录

Hank-Yu
 Hank-Yu
发布于 2015/06/16 13:45
字数 649
阅读 97
收藏 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#中使用装饰器模式和扩展方法实现Fluent Interface

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

tantexian
2016/06/12
10
0
SuperSocket 1.0 stable 发布了

项目首页: http://supersocket.codeplex.com/ 下载地址:http://supersocket.codeplex.com/releases/view/54186 什么是SuperSocket? SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,......

江振宇
2010/10/19
593
0
野心勃勃的NoSQL新贵 MongoDB应用实战(1)

MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的...

浮躁的码农
2016/04/13
15
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring 事件

ContextRefreshedEvent Event raised when an {@code ApplicationContext} gets initialized or refreshed. ContextClosedEvent Event raised when an {@code ApplicationContext} gets clos......

Canaan_
29分钟前
1
0
leetcode两数之和

leetcode中求两数之和解决方法 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 给定 nums = [2, 7, 11, ...

lar555
45分钟前
1
0
js实现限制网页内容复制

转载 在我们做的网页发到网上后,如果访客看到比较喜欢的内容,只要复制就可以变为自己的,自己辛辛苦苦弄半天还不及人家的一下复制,有时为了只让访客看到,而不能让它们复制内容,就用Jav...

lc_comeon
49分钟前
1
0
jenkins将spring boot项目发布到阿里云镜像中

1、spring boot项目 1.1 pom.xml配置 <artifactId>xxx-docker</artifactId><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.......

xixingzhe
今天
0
0
qsv格式可以在电视上播放吗

  大家都知道qsv格式是爱奇艺的独家缓存格式,是加密的,一般的播放器是无法播放的,只能在爱奇艺播放器上播放,如果想要在电视上播放,就必须要安装爱奇艺播放器,比较麻烦。其实还有一种...

萤火的萤火
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部