在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。在安全领域,日志系统的重要地位尤甚,可以说是安全审计方面最主要的工具之一。

  日志系统概览

  按照系统类型进行区分的话,日志系统可以分为操作系统日志、应用系统日志、安全系统日志等等。每种操作系统的日志都有其自身特有的设计和规范,例如Windows系统的日志通常按照其惯有的应用程序、安全和系统这样的分类方式进行存储,而类似Linux这样的各种Class UNIX系统通常都使用兼容Syslog规范的日志系统。

  下面主要讲述的应用程序的本地日志记录方式,这里用文本文件记录日志;

具体应用如下:

编写日志记录类

  1. public class WsdLogger
  2. {
  3. private static object lockobj = new object();
  4. private string logDirectory;
  5. private string loggerDate;
  6. private string loggerFile;
  7. private string loggerName;
  8. private string logThisDirectory;
  9.  
  10. /// <summary>
  11. /// 创建日志对象
  12. /// </summary>
  13. /// <param name="loggerName">日志文件名</param>
  14. public WsdLogger(string loggerName)
  15. {
  16. if (!string.IsNullOrEmpty(loggerName))
  17. {
  18. this.loggerName = loggerName;
  19. }
  20. else
  21. {
  22. this.loggerName = "DefaultLogger";
  23. }
  24. //创建程序记录日志文件夹
  25. this.logDirectory = new FileInfo(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace("file:///", string.Empty)).DirectoryName + @"\logs";
  26. if (!Directory.Exists(this.logDirectory))
  27. {
  28. Directory.CreateDirectory(this.logDirectory);
  29. }
  30. }
  31.  
  32. /// <summary>
  33. /// 写入日志内容
  34. /// </summary>
  35. /// <param name="line"></param>
  36. public void Write(string line)
  37. {
  38. try
  39. {
  40. lock (lockobj)
  41. {
  42. string str = DateTime.Now.ToString("yyyy-MM-dd");
  43. if ((this.loggerFile == "") || !str.Equals(this.loggerDate))
  44. {
  45. this.loggerDate = str;
  46. this.logThisDirectory = this.logDirectory + @"\" + this.loggerDate;
  47. if (!Directory.Exists(this.logThisDirectory))
  48. {
  49. Directory.CreateDirectory(this.logThisDirectory);
  50. }
  51. this.loggerFile = this.logThisDirectory + @"\" + this.loggerName + ".log";
  52. }
  53. if (File.Exists(this.loggerFile))
  54. {
  55. //判断如果超过1M就进行文件分割
  56. FileInfo file = new FileInfo(this.loggerFile);
  57. if (file.Length > )
  58. {
  59. file.CopyTo(this.logThisDirectory + @"\" + this.loggerName + DateTime.Now.ToString("hhmmss") + ".log", true);
  60. file.Delete();
  61. }
  62. using (StreamWriter writer = File.AppendText(this.loggerFile))
  63. writer.WriteLine(string.Format("{0} {1} {2}", DateTime.Now.ToString("HH:mm:ss:ffff"), Thread.CurrentThread.Name, line));
  64. }
  65.  
  66. if (!File.Exists(this.loggerFile))
  67. using (StreamWriter writer = File.CreateText(this.loggerFile))
  68. writer.WriteLine(string.Format("{0} {1} {2}", DateTime.Now.ToString("HH:mm:ss:ffff"), Thread.CurrentThread.Name, line));
  69. }
  70. }
  71. catch (Exception exception)
  72. {
  73. using (StreamWriter writer2 = File.Exists("log.txt") ? File.AppendText("log.txt") : File.CreateText("log.txt"))
  74. {
  75. try
  76. {
  77. writer2.WriteLine(exception.ToString());
  78. writer2.Close();
  79. }
  80. catch
  81. {
  82. }
  83. }
  84. }
  85. }
  86.  
  87. public void Write(string line, params object[] objects)
  88. {
  89. this.Write(string.Format(line, objects));
  90. }
  91. }

调用日志记录部分

  1. /// <summary>
  2. /// 记录rfid操作日志
  3. /// </summary>
  4. /// <param name="log"></param>
  5. public static void WriteRfidLog(RFlDLog log, string err)
  6. {
  7. WsdLogger lg = new WsdLogger("WsdReceiveService");
  8. lg.Write(log.WriteLog(err));
  9. }

如果有更好的方法,望各位提供。

C#日志编写的更多相关文章

  1. Storm中遇到的日志多次重写问题(一)

    业务描述: 统计从kafka spout中读取的数据条数,以及写入redis的数据的条数,写入hdfs的数据条数,写入kafaka的数据条数.并且每过5秒将数据按照json文件的形式写入日志.其中保存 ...

  2. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  3. kali自动化清理缓存和日志

    前几天发现kali无法正常开机,启动盘启动进去之后, 发现/var/log/目录下的日志文件太大把硬盘占满了,于是乎... 文件主要是这三个: kern.log :   包含内核产生的日志,有助于在定 ...

  4. logstash收集nginx访问日志

    logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...

  5. ELK日志分析工具

    一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎 ...

  6. SQL2008如何清空压缩数据库日志

    SQL2008如何清空压缩数据库日志 编写人:左丘文 2015-4-10 近期在给一系统初始化资料时,不断的导入导出,因此一不小心,就将数据的SQL(sql2008R2)的是日志档弄得比数据库还大,给 ...

  7. 消费滚动滴log日志文件(flume监听,kafka消费,zookeeper协同)

    第一步:数据源 手写程序实现自动生成如下格式的日志文件: 15837312345,13737312345,2017-01-09 08:09:10,0360 打包放到服务器,使用如下命令执行,模拟持续不 ...

  8. SQL SERVER 日志写入原理浅析

    昨天看到网上有一个关于SQL SERVER 课件,便随手下载了下来看看主要讲了些什么内容,于是看到了下面两个PPT页面 由于第一张PPT上的内容不太准确(日志文件中没有“日志页”的概念,只有VLF的概 ...

  9. ELK处理Spring Boot 日志,妙!

    在排查线上异常的过程中,查询日志总是必不可缺的一部分.现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难. 工欲善其事,必先利其器.如果此时有一个统一的实时日志分析平台,那 ...

随机推荐

  1. CSS3实现轮播图效果2

    先前用CSS3做了一个一张图片实现的轮播,但是这样的图片很难找,于是又改进了一下. HTML: <div class="box"> <ul> <li& ...

  2. HTML的结束标签问题

    根据w3c的原则,xml的每个开始标签必须有一个结束标签与之对应,也就是<html>必须要有</html>结束,才是一个完整的元素,除非它是一个自封闭标签,自封闭就是<i ...

  3. [leetcode]_Sum Root to Leaf Numbers

    题目:计算一棵二叉树所有路径组成的数的总和. 思考:也是DFS的基础应用.虽然还是套着别人的DFS框架写的,但是学习通常会经历先模拟,再创新的过程. 代码: private int sum = 0; ...

  4. php final static const成员属性用法

    http://www.111cn.net/phper/php/38976.htm 首先来说说final 1.final不能用来修饰成员属性 2.final只能修饰类和方法 作用:被修饰的类不能被子类所 ...

  5. mariadb数据库备份学习笔记

    备份类型: 完全备份 部分备份:仅备份其中的一张表或多张表 增量备份:仅备份从上次完全备份或增量备份之后变化的数据部分 热备份:在线备份,读写操作不受影响 温备份:在线备份,读操作可继续进行,但写操作 ...

  6. MongoDB的安装小结

    正在做毕业设计,想尝试着用mongoDB来做数据库,之前没有接触过,然后,就在网上找资料,自己捣鼓,弄了好久才算上真正的把它安上,好心累.... 网上有很多安装教程,大同小异,这里呢,我只是想记录一下 ...

  7. 使用sqoop将mysql数据导入到hadoop

    hadoop的安装配置这里就不讲了. Sqoop的安装也很简单. 完成sqoop的安装后,可以这样测试是否可以连接到mysql(注意:mysql的jar包要放到 SQOOP_HOME/lib 下): ...

  8. C++十进制转换为二进制

    题目内容:将十进制整数转换成二进制数. 输入描述:输入数据中含有不多于50个的整数n(-231<n<231). 输出描述:对于每个n,以11位的宽度右对齐输入n值,然后输出“-->” ...

  9. (转载)实现QQ侧滑边栏

    Android ViewDragHelper实现QQ侧滑边栏 移动手机版的QQ的左边侧栏,有一个特殊的交互设计效果:当用户手指向右或向左滑动时,QQ的左边会弹出或收缩一个侧滑的边栏.这种效果简单的做法 ...

  10. 枚举esum20160530

    关于枚举 常见定义形式,类似定义结构体,先定义枚举变量类型: typedef enum{ Bit_RESET = 0,   Bit_SET}BitAction; enum box{pencil,pen ...