使用单例模式实现日志写入。附代码

单例模式保证一个类仅有一个实例,并提供一个访问的他的全局访问点。

由于单例模式和日志类的应用场景很相似,因为文件只能被一个进程打开。

所以使用单例模式获取日志文件的实例对象,避免了一个文件多次被打开造成的异常。

代码写了一下,不知道在实际应用的过程中还有没有问题,如果要使用请先测试一下。

如果有不正确的地方,请高手看过后指出来。谢谢!

 1 using System;
 2 using System.Collections.Generic;
 3 using System.IO;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading;
 7 using System.Threading.Tasks;
 8
 9 namespace Singleton
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             for (int i = 0; i < 10000; i++)
16             {
17                 Thread thr1 = new Thread(new ThreadStart(delegate() { Log.Write("问题A" + i); }));
18                 Thread thr2 = new Thread(new ThreadStart(delegate() { Log.Write("问题B" + i); }));
19                 thr1.Start();
20                 thr2.Start();
21             }
22             Console.Read();
23         }
24     }
25
26     /// <summary>
27     /// 异常文件单利模式(文件只能有一个进程访问,所以使用单利模式实现)
28     /// </summary>
29     public class LogFile
30     {
31         static FileInfo fi = null;
32         static readonly object syncObject = new object();
33         static string saveName = @"C:\WRITE_LOG.TXT";
34         public static FileInfo Log()
35         {
36             lock (syncObject)
37             {
38                 if (fi == null)
39                 {
40                     fi = new FileInfo(saveName);
41                 }
42             }
43             return fi;
44         }
45     }
46     /// <summary>
47     /// 日志写入类
48     /// </summary>
49     public class Log
50     {
51         static readonly object syncObjectWrite = new object();
52         public static void Write(string strContent)
53         {
54             lock (syncObjectWrite)
55             {
56                 using (StreamWriter writer = LogFile.Log().AppendText())
57                 {
58                     writer.WriteLine("=====================================\r\n"
59                         + "添加日期为:" + DateTime.Now.ToString() + "\r\n"
60                         + "日志内容为:" + strContent + "\r\n"
61                         + "=====================================");
62                 }
63             }
64         }
65     }
66
67 }

  

时间: 2024-11-03 21:13:08

使用单例模式实现日志写入。附代码的相关文章

mongodb+python 实现自动收集mongodb的慢查询日志(附代码)

  1  简介  这个是用在生产环境中的一个MongoDB慢查询日志自动收集脚本,当初想写这个脚本的思路就是为了方便收集慢查询日志并且利于分析.由于公司的mognodb不多,就4台,所以这个小脚本也只是适用普通的生产环境. 页面主要使用了 bootstrap 为前端显示,datatable 为分析的时候使用.   2  流程 主要的流程是: 1  通过 pymongo 连接到 mongodb 2  使用find()命令查询 system.profile下的所有慢查询日志 3  使用jinjia2

分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载

一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.NET Socket Tcp 技术实现的分布消息总线,也是一个简单的发布订阅框架: 并且以案例的形式为大家演示了如何使用这个分布式消息总线架构发布订阅架构模式的应用程序,在得到各位同仁的反馈的同时,大家也非常想了解订阅者离线的情况,即支持离线构发布订阅框架. 二.离线架构 不同于订阅者.发布者都同时在

将日志写入Debug窗口

定义在NuGet包“Microsoft.Extensions.Logging.Debug”中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志消息.如果需要使用DebugLogger来写日志,我们需要将它的提供者DebugLoggerProvider注册到LoggerFactory上.由于定义在Debug类型中的所有方法都是针对Debug编译模式的,所以在只有针对Debug模式编译的应用中使用DebugLogger才有意义.这里将的“Debug编译模式”涉及

Android 使用Log4j把日志写入SD卡,动态修改输出文件名称

一.Log4j简单使用 1. 下载log4j.jar http://logging.apache.org/log4j/2.x/ 2. 创建Java代码 public class Loggers { public static Logger logger = Logger. getLogger(Loggers. class); public static void init() { try { PatternLayout patternLayout = new PatternLayout(); p

.NET Core的日志[4]:将日志写入EventLog

面向Windows的编程人员应该不会对Event Log感到陌生,以至于很多人提到日志,首先想到的就是EventLog.EventLog不仅仅记录了Windows系统自身针对各种事件的日志,我们的应用也可以利用提供的API将日志消息写到EventLog中.与EventLog相关的API都定义在System.Diagnostics.EventLog这个类型中,我们不仅仅可以利用它读取.写入和删除日志,还可以使用它来创建和删除Event Source..NET Core的日志模型利用EventLog

Python写自动化之logging日志写入

日志写入是我们日常工作中常用到的功能,我们可以直接使用写文件的方式来以自己的方式写日志,另外,当我们在一个比较大的项目中,涉及到日志写入时,一般会使用logging模块来进行日志的写入,第一步,先写一个单例,创建一个logger对象: def _instance(): global logger if logger is None: logging.config.fileConfig(os.path.join(util.get_current(), "logger.conf")) lo

Python + logging 输出到屏幕,将log日志写入文件

原文地址 : https://www.cnblogs.com/nancyzhu/p/8551506.html 日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数据).事件还具有开发者归因于事件的重要性:重要性也可以称为级别或严重性. logging提供了一组便利的函数,用来做简单的日志.它们是 debug(). info(). warning().

关于log4net日志写入mysql数据库记录

网上关于log4net日志写入mysql数据库的博客感觉比较少,所以这边搞定之后先过来记录一下. 首先新建个项目,我命名是log4netDemo,然后需要引入两个dll,一个是mysql.dll,一个是log4net.dll.可以通过NuGet安装这两个dll,如下图 我这边mysql和log4net的版本分别是6.10.8和2.0.8,当然mysql更高版本的也是可以的. 然后在项目中新建一个log4net.config的配置文件,配置全文如下: <?xml version="1.0&q

Python + logging输出到屏幕,将log日志写入到文件

logging提供了一组便利的函数,用来做简单的日志.它们是 debug(). info(). warning(). error() 和 critical(). logging函数根据它们用来跟踪的事件的级别或严重程度来命名.标准级别及其适用性描述如下(以严重程度递增排序): 级别 何时使用 DEBUG 详细信息,一般只在调试问题时使用. INFO 证明事情按预期工作. WARNING 某些没有预料到的事件的提示,或者在将来可能会出现的问题提示.例如:磁盘空间不足.但是软件还是会照常运行. ER