C#日志编写
在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。在安全领域,日志系统的重要地位尤甚,可以说是安全审计方面最主要的工具之一。
日志系统概览
按照系统类型进行区分的话,日志系统可以分为操作系统日志、应用系统日志、安全系统日志等等。每种操作系统的日志都有其自身特有的设计和规范,例如Windows系统的日志通常按照其惯有的应用程序、安全和系统这样的分类方式进行存储,而类似Linux这样的各种Class UNIX系统通常都使用兼容Syslog规范的日志系统。
下面主要讲述的应用程序的本地日志记录方式,这里用文本文件记录日志;
具体应用如下:
编写日志记录类
- public class WsdLogger
- {
- private static object lockobj = new object();
- private string logDirectory;
- private string loggerDate;
- private string loggerFile;
- private string loggerName;
- private string logThisDirectory;
- /// <summary>
- /// 创建日志对象
- /// </summary>
- /// <param name="loggerName">日志文件名</param>
- public WsdLogger(string loggerName)
- {
- if (!string.IsNullOrEmpty(loggerName))
- {
- this.loggerName = loggerName;
- }
- else
- {
- this.loggerName = "DefaultLogger";
- }
- //创建程序记录日志文件夹
- this.logDirectory = new FileInfo(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace("file:///", string.Empty)).DirectoryName + @"\logs";
- if (!Directory.Exists(this.logDirectory))
- {
- Directory.CreateDirectory(this.logDirectory);
- }
- }
- /// <summary>
- /// 写入日志内容
- /// </summary>
- /// <param name="line"></param>
- public void Write(string line)
- {
- try
- {
- lock (lockobj)
- {
- string str = DateTime.Now.ToString("yyyy-MM-dd");
- if ((this.loggerFile == "") || !str.Equals(this.loggerDate))
- {
- this.loggerDate = str;
- this.logThisDirectory = this.logDirectory + @"\" + this.loggerDate;
- if (!Directory.Exists(this.logThisDirectory))
- {
- Directory.CreateDirectory(this.logThisDirectory);
- }
- this.loggerFile = this.logThisDirectory + @"\" + this.loggerName + ".log";
- }
- if (File.Exists(this.loggerFile))
- {
- //判断如果超过1M就进行文件分割
- FileInfo file = new FileInfo(this.loggerFile);
- if (file.Length > )
- {
- file.CopyTo(this.logThisDirectory + @"\" + this.loggerName + DateTime.Now.ToString("hhmmss") + ".log", true);
- file.Delete();
- }
- using (StreamWriter writer = File.AppendText(this.loggerFile))
- writer.WriteLine(string.Format("{0} {1} {2}", DateTime.Now.ToString("HH:mm:ss:ffff"), Thread.CurrentThread.Name, line));
- }
- if (!File.Exists(this.loggerFile))
- using (StreamWriter writer = File.CreateText(this.loggerFile))
- writer.WriteLine(string.Format("{0} {1} {2}", DateTime.Now.ToString("HH:mm:ss:ffff"), Thread.CurrentThread.Name, line));
- }
- }
- catch (Exception exception)
- {
- using (StreamWriter writer2 = File.Exists("log.txt") ? File.AppendText("log.txt") : File.CreateText("log.txt"))
- {
- try
- {
- writer2.WriteLine(exception.ToString());
- writer2.Close();
- }
- catch
- {
- }
- }
- }
- }
- public void Write(string line, params object[] objects)
- {
- this.Write(string.Format(line, objects));
- }
- }
调用日志记录部分
- /// <summary>
- /// 记录rfid操作日志
- /// </summary>
- /// <param name="log"></param>
- public static void WriteRfidLog(RFlDLog log, string err)
- {
- WsdLogger lg = new WsdLogger("WsdReceiveService");
- lg.Write(log.WriteLog(err));
- }
如果有更好的方法,望各位提供。
C#日志编写的更多相关文章
- Storm中遇到的日志多次重写问题(一)
业务描述: 统计从kafka spout中读取的数据条数,以及写入redis的数据的条数,写入hdfs的数据条数,写入kafaka的数据条数.并且每过5秒将数据按照json文件的形式写入日志.其中保存 ...
- 日志分析工具ELK配置详解
日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...
- kali自动化清理缓存和日志
前几天发现kali无法正常开机,启动盘启动进去之后, 发现/var/log/目录下的日志文件太大把硬盘占满了,于是乎... 文件主要是这三个: kern.log : 包含内核产生的日志,有助于在定 ...
- logstash收集nginx访问日志
logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...
- ELK日志分析工具
一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎 ...
- SQL2008如何清空压缩数据库日志
SQL2008如何清空压缩数据库日志 编写人:左丘文 2015-4-10 近期在给一系统初始化资料时,不断的导入导出,因此一不小心,就将数据的SQL(sql2008R2)的是日志档弄得比数据库还大,给 ...
- 消费滚动滴log日志文件(flume监听,kafka消费,zookeeper协同)
第一步:数据源 手写程序实现自动生成如下格式的日志文件: 15837312345,13737312345,2017-01-09 08:09:10,0360 打包放到服务器,使用如下命令执行,模拟持续不 ...
- SQL SERVER 日志写入原理浅析
昨天看到网上有一个关于SQL SERVER 课件,便随手下载了下来看看主要讲了些什么内容,于是看到了下面两个PPT页面 由于第一张PPT上的内容不太准确(日志文件中没有“日志页”的概念,只有VLF的概 ...
- ELK处理Spring Boot 日志,妙!
在排查线上异常的过程中,查询日志总是必不可缺的一部分.现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难. 工欲善其事,必先利其器.如果此时有一个统一的实时日志分析平台,那 ...
随机推荐
- CSS3实现轮播图效果2
先前用CSS3做了一个一张图片实现的轮播,但是这样的图片很难找,于是又改进了一下. HTML: <div class="box"> <ul> <li& ...
- HTML的结束标签问题
根据w3c的原则,xml的每个开始标签必须有一个结束标签与之对应,也就是<html>必须要有</html>结束,才是一个完整的元素,除非它是一个自封闭标签,自封闭就是<i ...
- [leetcode]_Sum Root to Leaf Numbers
题目:计算一棵二叉树所有路径组成的数的总和. 思考:也是DFS的基础应用.虽然还是套着别人的DFS框架写的,但是学习通常会经历先模拟,再创新的过程. 代码: private int sum = 0; ...
- php final static const成员属性用法
http://www.111cn.net/phper/php/38976.htm 首先来说说final 1.final不能用来修饰成员属性 2.final只能修饰类和方法 作用:被修饰的类不能被子类所 ...
- mariadb数据库备份学习笔记
备份类型: 完全备份 部分备份:仅备份其中的一张表或多张表 增量备份:仅备份从上次完全备份或增量备份之后变化的数据部分 热备份:在线备份,读写操作不受影响 温备份:在线备份,读操作可继续进行,但写操作 ...
- MongoDB的安装小结
正在做毕业设计,想尝试着用mongoDB来做数据库,之前没有接触过,然后,就在网上找资料,自己捣鼓,弄了好久才算上真正的把它安上,好心累.... 网上有很多安装教程,大同小异,这里呢,我只是想记录一下 ...
- 使用sqoop将mysql数据导入到hadoop
hadoop的安装配置这里就不讲了. Sqoop的安装也很简单. 完成sqoop的安装后,可以这样测试是否可以连接到mysql(注意:mysql的jar包要放到 SQOOP_HOME/lib 下): ...
- C++十进制转换为二进制
题目内容:将十进制整数转换成二进制数. 输入描述:输入数据中含有不多于50个的整数n(-231<n<231). 输出描述:对于每个n,以11位的宽度右对齐输入n值,然后输出“-->” ...
- (转载)实现QQ侧滑边栏
Android ViewDragHelper实现QQ侧滑边栏 移动手机版的QQ的左边侧栏,有一个特殊的交互设计效果:当用户手指向右或向左滑动时,QQ的左边会弹出或收缩一个侧滑的边栏.这种效果简单的做法 ...
- 枚举esum20160530
关于枚举 常见定义形式,类似定义结构体,先定义枚举变量类型: typedef enum{ Bit_RESET = 0, Bit_SET}BitAction; enum box{pencil,pen ...