背景
临时接到一个项目, 需要用到c#, 写一个winform的管理端, 为了自己调试跟踪程序流程方便, 所以封装了一个简单的log工具类.
代码
1. 接口
namespace Zoo.Log
{
/// <summary>
/// 接口
/// </summary>
public interface ILogHandler
{
public void Write(string msg);
}
}
2. 接口实现
此处仅操作文本文件, 另外你也可以写其他实现(比如: redis, mysql)
using System;
using System.IO;
namespace Zoo.Log
{
/// <summary>
/// 接口实现 - 使用文本文件
/// </summary>
public class LogHandler : ILogHandler
{
private static string fileName;
private static string dirName;
public LogHandler(string fileName = "")
{
// System.AppDomain.CurrentDomain.BaseDirectory 获取程序的基目录。
// 设置日志保存目录
dirName = System.AppDomain.CurrentDomain.BaseDirectory + "log";
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
if (fileName == null || fileName.Length < 1)
{
fileName = "clear_car_" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
}
LogHandler.fileName = fileName;
}
public void Write(string msg)
{
// public StreamWriter (string path, bool append);
using StreamWriter writer = new(Path.Combine(dirName, LogHandler.fileName), true);
writer.WriteLine(msg);
}
}
}
3. 应用类
using System;
using System.IO;
namespace Zoo.Log
{
/// <summary>
/// 应用类
/// </summary>
public class Log
{
/// <summary>
/// 静态变量的初始值是(默认值)变量类型的默认值。
/// 出于明确赋值检查的目的,静态变量被视为初始赋值。
/// </summary>
private static LogHandler logHandler;
private static string fileName;
private static void Write(int level, string msg)
{
if (Log.logHandler == null)
{
Log.logHandler = new LogHandler(Log.fileName);
}
string tmp = "[" + DateTime.Now + "]";
tmp = tmp + "[" + Log.GetLevelStr(level) + "]";
tmp += msg;
logHandler.Write(tmp);
}
private static string GetLevelStr(int level)
{
switch (level)
{
case 1:
return "debug";
case 2:
return "info";
case 4:
return "warn";
case 8:
return "error";
}
return "unknown";
}
public static void SetHandle(string fileName)
{
Log.fileName = fileName;
}
public static void DEBUG(string msg)
{
Log.Write(1, msg);
}
public static void INFO(string msg)
{
Log.Write(2, msg);
}
public static void WARN(string msg)
{
Log.Write(4, msg);
}
public static void ERROR(string msg)
{
Log.Write(8, msg);
}
}
}
4. 调用
在需要加日志的地方直接调用:
Log.DEBUG("这里是调试1");
先设置日志文件, 再调用:
Log.SetHandle("test.txt");
Log.DEBUG("这里是调试1");