程序运行日志代码

此博客展示了一段C#代码,实现了一个名为LogHelper的日志管理类。该类可进行单实例操作,能将日志信息写入指定文件夹的文本文件中。在写入时会对路径进行判断,若路径不存在则创建,最后会释放相关内存资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Utility
{
/// <summary>
/// 日记管理
/// </summary>
public class LogHelper
{
/// <summary>
/// 文件夹路径
/// </summary>
string Path = "";
static LogHelper _LogHelper = null;
object LockWrite = "LockWrite" as object;
/// <summary>
///
/// </summary>
public LogHelper()
{

}
/// <summary>
///
/// </summary>
/// <param name="_Path"> 文件夹路径</param>
public LogHelper(string _Path)
{
Path = _Path;
}
/// <summary>
/// 单实例
/// </summary>
public static LogHelper InstanctLogHelper
{
get
{
if (_LogHelper == null)
_LogHelper = new LogHelper();
return _LogHelper;

}
}

/// <summary>
/// 日记写入
/// </summary>
/// <param name="strMsg"></param>
public void WriteLog(string strMsg, string strFileName = "")
{
lock (LockWrite)
{
if (strFileName == "")
strFileName = "Log-" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
else
strFileName = strFileName + "-" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
System.IO.FileStream fs = null;
System.IO.StreamWriter m_streamWriter = null;
try
{
if (string.IsNullOrEmpty(Path))
{// 路径判断
if (string.IsNullOrEmpty(AppSetting.LogPath))
{ //读取配置信息
Path = AppSetting.GetAppPath+"\\log\\";
}
else
{// 读取程序路径
Path = AppSetting.LogPath;
}
}
if (!Directory.Exists(Path))
{// 不存在就创建
Directory.CreateDirectory(Path);
}

fs = new System.IO.FileStream(Path + strFileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
m_streamWriter = new System.IO.StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, System.IO.SeekOrigin.End);
m_streamWriter.WriteLine(strMsg + ": " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "\n");
}
catch { }
finally
{ // 释放内存
if (m_streamWriter != null)
{
m_streamWriter.Flush();
m_streamWriter.Dispose();
}
if (fs != null)
{ fs.Dispose(); }
}
}
}
}

}

转载于:https://www.cnblogs.com/yuesebote/p/9558791.html

长时间运行的程序(例如服务器程序),或者流程复杂的多线程程序,打日志几乎是必需的,然而易这个圈子我到目前为止没有见过任何一个正经的日志轮子。 关于无锁 :无锁直接在未知的项目中大量使用的话,可能会比有锁的日志安全。 关于性能 :开启自动轮替,比 CreateFile + WriteFile + 临界资源 直接写慢一点, 但是要注意 ,后者没有自动轮替,而且后者的自动轮替实现起来相对复杂,而且轮替的过程中容易阻塞、死锁或者丢失日志,而打日志最重要的就是【千万不要丢失日志】。 什么是自动轮替: 英文名 LogRotate,例如日志文件隔了一天就要换一个文件,否则文件越来越大,而且也不好整理和管理。比如默认每隔一天轮替一次。 我在这个日志系统里还加入了按照文件大小轮替,比如默认 100MB 轮替一次,太大了分析起来很吃力,编辑器带不动(我的日志不会太多,所以我自己使用会按照 10MB 来轮替,但是如果你的日志很频繁,轮替大小设置太小就会影响性能了)。 关于代码代码从某天想起到成型也没有多久(事实上今天才算写了个雏形),没有经历过正式的项目,经历了好几个版本所以也没有整理得很好看(相对的,可读性也还算可以了)。注释不多,对原理感兴趣的可以自行面向搜索引擎理解,不懂也可以交流。 吐槽 : 易的自定义数据类型真的慢啊。。。感谢 kyozy 指点,以后能不用自定义数据类型就不用了。 最后,这是个简陋的轮子,希望各位多多扩展和贡献代码,一个人的精力有限,所涉及的项目规模和场景也有限,所以... 我觉得这是个简陋但是很有意义的源码,希望各位与我一起完成它。 源码下载: 测试看  _临时子程序()  下面的  测试_无锁日志()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值