文档章节

C#简单日志记录

Hank-Yu
 Hank-Yu
发布于 2015/06/16 13:45
字数 649
阅读 76
收藏 0
点赞 0
评论 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

C#文本日志类

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

冬天之雪 ⋅ 2016/09/26 ⋅ 0

在C#中使用装饰器模式和扩展方法实现Fluent Interface

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

tantexian ⋅ 2016/06/12 ⋅ 0

SuperSocket 1.0 stable 发布了

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

江振宇 ⋅ 2010/10/19 ⋅ 0

野心勃勃的NoSQL新贵 MongoDB应用实战(1)

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

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

log4net 记录 总结 反思

说实话,我并不是太想写这篇文章,因为我承诺过要完成博客园的部分功能,所以一直都在积极的利用下班时间来完善这个系统, 但是我又不想让看我源代码的朋友不知道我写的代码是什么意思,所以...

架构师郭郭 ⋅ 2012/12/27 ⋅ 0

ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd

最近火的不能再火的日志框架就是ELK,其中E(Elasticsearch)表示日志存储,L(Logstash)表示日志收集,K(kibana)表示日志的UI界面,用来查询和分析,而其中的L可以使用Fluentd来代替,并...

mcy247 ⋅ 2017/12/05 ⋅ 0

Socket服务器开发框架--SuperSocket

SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,可用来构建一个服务器端 Socket 程序,而无需了解如何使用 Socket,如何维护Socket连接,Socket是如何工作的。该项目使用纯 C# 开发,...

江振宇 ⋅ 2010/06/13 ⋅ 14

关于PS4以上的一个新方法

关于PS4以上的一个新方法 最近在无意中发现一个PSCmdlet中的新的方法,应该在PS3.0 以上都会有 2.0 由于实在懒得弄个demo所以没验证,估计没有 这里还得提一下 某不给代码就喷的孩子 如果你要...

strikene ⋅ 2017/05/07 ⋅ 0

SuperSocket 1.6.3 发布,进一步稳固质量

SuperSocket 今日发布一个新的版本,包含了少量缺陷的修复: 修复了服务器实例处于停止状态时,性能采集器会抛出异常的缺陷 修复了在连接断开时发送多块数据时可能会抛出异常的缺陷 修复了几个...

江振宇 ⋅ 2014/07/29 ⋅ 12

没有更多内容

加载失败,请刷新页面

加载更多

下一页

笔试题之Java基础部分【简】【一】

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他 1.length、length()和size() length针对...

anlve ⋅ 26分钟前 ⋅ 2

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 50分钟前 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 55分钟前 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 8

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部