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

  日志系统概览

  按照系统类型进行区分的话,日志系统可以分为操作系统日志、应用系统日志、安全系统日志等等。每种操作系统的日志都有其自身特有的设计和规范,例如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#日志编写的更多相关文章

  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. WAMP环境下访问PHP提示下载PHP文件

    原因是服务器没有加载到PHP文件 到http.conf下加载 AddType application/x-httpd-php .php AddType application/x-httpd-php ...

  2. CentOS用户权限管理--su与sudo

    Linux权限管理--su与sudo 1.su用来切换登录的用户,比如当前用户为chen,可以用su zhu,并输入用户zhu的登录密码,就可以切换到用户zhu.如果一个普通用户想切换到root用户, ...

  3. 12.python中的列表

    先看列表是如何创建的: a = ['scolia', 123] b = list('scolia',123) 同样有两种创建方式,但一般用第一种. 列表和元祖最大的不同就是列表是可以修改的. 老规矩, ...

  4. WPF数据双向绑定

    设置双向绑定,首先控件要绑定的对象要先继承一个接口: INotifyPropertyChanged 然后对应被绑定的属性增加代码如下: 意思就是当Age这个属性变化时,要通知监听它变化的人. 即:Pr ...

  5. ListView用法及加载数据时的闪烁问题和加载数据过慢问题

    ListView介绍及添加数据时的闪烁问题 1.     ListView类 1.1 ListView常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示 ...

  6. HTML5 API 之 history

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. open/fopen read/fread write/fwrite区别

    fopen /open区别 UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别.1 ...

  8. C语言中进制知识总结

    1.什么是进制 进制是一种计数的方式,常用的有二进制.八进制.十进制.十六进制.任何数据在计算机内存中都是以二进制的形式存放的. 我对进制的个人理解,二进制数是以2为计算单元,满2进1位的数:八进制数 ...

  9. linux 下的使用 ln 创建 软链接 和 硬链接

    linux 下的一个指令 ln 作用: 创建软链接或者硬链接 Linux 系统下每创建一个文件,系统都会为此文件生成一个 index node 简称(inode) ,而每一个文件都包含用户数据(use ...

  10. hdu 5058 So easy

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5058 So easy Description Small W gets two files. Ther ...