最近做一個c++的服務端小項目,寫了一個簡單的日志組件,這兩天用c#翻譯了一遍,寫起來比c++快多了,給大家分享一下!
組件運行起來後,所有的日志信息都會被緩存到一個集合中,然後由一個單獨線程負責將集合中的日志信息寫入文件。
支持功能如下:
1、日志信息可按等級進行存儲;
2、支持日志文件到達指定大小自動更換;
3、只保存最近一個月的日志文件;
4、支持多線程環境下的日志記錄;
大致就這麼幾點,功能也挺簡單的,下面是組件接口:
using System;
namespace Soar.Framework
{
/// <summary>
/// 日志組件
/// </summary>
public interface ILogger
{
/// <summary>
/// 啟動日志組件
/// </summary>
bool Run();
/// <summary>
/// 啟動日志組件
/// </summary>
/// <param name="logLevel">等級</param>
/// <param name="logDirectory">日志文件存放目錄(例如:logs\\)</param>
/// <param name="maxFileSize">單個日志文件默認大小(單位:MB)</param>
/// <returns></returns>
bool Run(LogLevel logLevel, string logDirectory, int maxFileSize);
/// <summary>
/// 獲取當前設置的日志記錄等級
/// </summary>
/// <returns></returns>
string GetLevel();
/// <summary>
/// 設置日志記錄等級
/// </summary>
/// <param name="logLevel"></param>
/// <returns></returns>
bool SetLevel(LogLevel logLevel);
/// <summary>
/// 記錄調試信息
/// </summary>
/// <param name="msg"></param>
void Debug(string msg);
/// <summary>
/// 記錄一般信息
/// </summary>
/// <param name="msg"></param>
void Info(string msg);
/// <summary>
/// 記錄警告信息
/// </summary>
/// <param name="msg"></param>
void Warn(string msg);
/// <summary>
/// 記錄一般錯誤信息
/// </summary>
/// <param name="msg"></param>
void Error(string msg);
/// <summary>
/// 記錄嚴重錯誤信息
/// </summary>
/// <param name="msg"></param>
void Fatal(string msg);
}
}
具體調用方式請參見源碼,在編寫該日志組件時,需要注意一點:
使用Create.File創建文件,該方法返回的是一個FileStream對象,且該對象會一直占用你創建的文件,使你無法對創建的文件進行操作,
所以需要在創建文件後,對返回的對象進行手動釋放。
if (!File.Exists(filePath))
{
FileStream fs = File.Create(filePath);
fs.Flush();
fs.Close();
}