C#日志记录设计与实现(BenXHLog)
C#日志记录设计与实现
日志记录:
日志记录在程序设计开发过程中,是非常重要的,可以供调试和记录数据,虽然说有开源的强大日志管理系统,比如apache的Log4Net,功能可谓强悍,但是有时候,不需要这么大的日志,只需要显示和文件记录就可以了,没必要用这么重的日志系统,那么就需要自己来写,如下就是一个简单的日志记录和显示模块的设计和实现,如有不足,还望见谅!废话不多,直入主题。
笨小孩日志:BenXHLog
类文件设计:

文件结构简单,类图就不画了,细心的已经发现了,这就是一个简单工厂模式,
程序代码:
Ilog接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BenXH.Log.Log
{
public interface ILog
{
bool IsDebugEnabled { get; } bool IsErrorEnabled { get; } bool IsFatalEnabled { get; } bool IsInfoEnabled { get; } bool IsWarnEnabled { get; } void Debug(bool isWriteFile,object message); void Debug(bool isWriteFile, object message, Exception exception); void DebugFormat(bool isWriteFile, string format, object arg0); void DebugFormat(bool isWriteFile, string format, params object[] args); void DebugFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args); void DebugFormat(bool isWriteFile, string format, object arg0, object arg1); void DebugFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2); void Error(bool isWriteFile,object message); void Error(bool isWriteFile, object message, Exception exception); void ErrorFormat(bool isWriteFile, string format, object arg0); void ErrorFormat(bool isWriteFile, string format, params object[] args); void ErrorFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args); void ErrorFormat(bool isWriteFile, string format, object arg0, object arg1); void ErrorFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2); void Fatal(bool isWriteFile, object message); void Fatal(bool isWriteFile, object message, Exception exception); void FatalFormat(bool isWriteFile, string format, object arg0); void FatalFormat(bool isWriteFile, string format, params object[] args); void FatalFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args); void FatalFormat(bool isWriteFile, string format, object arg0, object arg1); void FatalFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2); void Info(bool isWriteFile, object message); void Info(bool isWriteFile, object message, Exception exception); void InfoFormat(bool isWriteFile, string format, object arg0); void InfoFormat(bool isWriteFile, string format, params object[] args); void InfoFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args); void InfoFormat(bool isWriteFile, string format, object arg0, object arg1); void InfoFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2); void Warn(bool isWriteFile, object message); void Warn(bool isWriteFile, object message, Exception exception); void WarnFormat(bool isWriteFile, string format, object arg0); void WarnFormat(bool isWriteFile, string format, params object[] args); void WarnFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args); void WarnFormat(bool isWriteFile, string format, object arg0, object arg1); void WarnFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2);
}
}
ILogFactory工厂接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BenXH.Log.Log
{
public interface ILogFactory
{
ILog GetLog(string name);
}
}
日志类Log 这个代码实现多一点,合并了,点开看吧
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BenXH.Log.Log
{
/// <summary>
/// Console Log
/// </summary>
internal class Log : ILog
{
private string m_Name; private const string m_MessageTemplate = "{0}-{1}: {2}"; private const string m_Debug = "DEBUG"; private const string m_Error = "ERROR"; private const string m_Fatal = "FATAL"; private const string m_Info = "INFO"; private const string m_Warn = "WARN"; /// <summary>
/// Initializes a new instance of the <see cref="Log"/> class.
/// </summary>
/// <param name="name">The name.</param>
public Log(string name)
{
m_Name = name;
} /// <summary>
/// Gets a value indicating whether this instance is debug enabled.
/// </summary>
/// <value>
/// <c>true</c> if this instance is debug enabled; otherwise, <c>false</c>.
/// </value>
public bool IsDebugEnabled
{
get { return true; }
} /// <summary>
/// Gets a value indicating whether this instance is error enabled.
/// </summary>
/// <value>
/// <c>true</c> if this instance is error enabled; otherwise, <c>false</c>.
/// </value>
public bool IsErrorEnabled
{
get { return true; }
} /// <summary>
/// Gets a value indicating whether this instance is fatal enabled.
/// </summary>
/// <value>
/// <c>true</c> if this instance is fatal enabled; otherwise, <c>false</c>.
/// </value>
public bool IsFatalEnabled
{
get { return true; }
} /// <summary>
/// Gets a value indicating whether this instance is info enabled.
/// </summary>
/// <value>
/// <c>true</c> if this instance is info enabled; otherwise, <c>false</c>.
/// </value>
public bool IsInfoEnabled
{
get { return true; }
} /// <summary>
/// Gets a value indicating whether this instance is warn enabled.
/// </summary>
/// <value>
/// <c>true</c> if this instance is warn enabled; otherwise, <c>false</c>.
/// </value>
public bool IsWarnEnabled
{
get { return true; }
} public string GetDataTimeLog(string log)
{
return String.Format("[{0}]>>{1}", DateTime.Now.ToString("yy-MM-dd HH:mm:ss"), log);
} /// <summary>
/// Logs the debug message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
public void Debug(bool isWriteFile, object message)
{
string log = GetDataTimeLog(message.ToString());
Console.WriteLine(m_MessageTemplate, m_Name, m_Debug, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Debug, log);
}
} /// <summary>
/// Logs the debug message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
/// <param name="exception">The exception.</param>
public void Debug(bool isWriteFile, object message, Exception exception)
{
string log =GetDataTimeLog(message + Environment.NewLine + exception.Message + exception.StackTrace);
Console.WriteLine(m_MessageTemplate, m_Name, m_Debug, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Debug, log);
}
} /// <summary>
/// Logs the debug message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
public void DebugFormat(bool isWriteFile, string format, object arg0)
{
string log = GetDataTimeLog(string.Format(format, arg0));
Console.WriteLine(m_MessageTemplate, m_Name, m_Debug, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Debug, log);
}
} /// <summary>
/// Logs the debug message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void DebugFormat(bool isWriteFile, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Debug, string.Format(format, args));
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Debug, log);
}
} /// <summary>
/// Logs the debug message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="provider">The provider.</param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void DebugFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Debug, string.Format(provider, format, args));
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Debug, log);
}
} /// <summary>
/// Logs the debug message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
public void DebugFormat(bool isWriteFile, string format, object arg0, object arg1)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1));
Console.WriteLine(m_MessageTemplate, m_Name, m_Debug, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Debug, log);
}
} /// <summary>
/// Logs the debug message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
/// <param name="arg2">The arg2.</param>
public void DebugFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1, arg2));
Console.WriteLine(m_MessageTemplate, m_Name, m_Debug, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Debug, log);
}
} /// <summary>
/// Logs the error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
public void Error(bool isWriteFile, object message)
{
string log = GetDataTimeLog(message.ToString());
Console.WriteLine(m_MessageTemplate, m_Name, m_Error, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Error, log);
}
} /// <summary>
/// Logs the error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
/// <param name="exception">The exception.</param>
public void Error(bool isWriteFile, object message, Exception exception)
{
string log = GetDataTimeLog(message + Environment.NewLine + exception.Message + exception.StackTrace);
Console.WriteLine(m_MessageTemplate, m_Name, m_Error, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Error,log);
}
} /// <summary>
/// Logs the error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
public void ErrorFormat(bool isWriteFile, string format, object arg0)
{
string log = GetDataTimeLog(string.Format(format, arg0));
Console.WriteLine(m_MessageTemplate, m_Name, m_Error, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Error, log);
}
} /// <summary>
/// Logs the error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void ErrorFormat(bool isWriteFile, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Error,log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Error, log);
}
} /// <summary>
/// Logs the error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="provider">The provider.</param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void ErrorFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(provider, format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Error, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Error, log);
}
} /// <summary>
/// Logs the error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
public void ErrorFormat(bool isWriteFile, string format, object arg0, object arg1)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1));
Console.WriteLine(m_MessageTemplate, m_Name, m_Error,log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Error, log);
}
} /// <summary>
/// Logs the error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
/// <param name="arg2">The arg2.</param>
public void ErrorFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg2));
Console.WriteLine(m_MessageTemplate, m_Name, m_Error, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Error, log);
}
} /// <summary>
/// Logs the fatal error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
public void Fatal(bool isWriteFile, object message)
{
string log = GetDataTimeLog(message.ToString());
Console.WriteLine(m_MessageTemplate, m_Name, m_Fatal, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name,m_Fatal,log);
}
} /// <summary>
/// Logs the fatal error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
/// <param name="exception">The exception.</param>
public void Fatal(bool isWriteFile, object message, Exception exception)
{
string log = GetDataTimeLog(message + Environment.NewLine + exception.Message + exception.StackTrace);
Console.WriteLine(m_MessageTemplate, m_Name, m_Fatal, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Fatal, log);
}
} /// <summary>
/// Logs the fatal error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
public void FatalFormat(bool isWriteFile, string format, object arg0)
{
string log = GetDataTimeLog(string.Format(format, arg0));
Console.WriteLine(m_MessageTemplate, m_Name, m_Fatal, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Fatal, log);
}
} /// <summary>
/// Logs the fatal error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void FatalFormat(bool isWriteFile, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Fatal,log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Fatal, log);
}
} /// <summary>
/// Logs the fatal error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="provider">The provider.</param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void FatalFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(provider, format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Fatal, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Fatal, log);
}
} /// <summary>
/// Logs the fatal error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
public void FatalFormat(bool isWriteFile, string format, object arg0, object arg1)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1));
Console.WriteLine(m_MessageTemplate, m_Name, m_Fatal, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Fatal, log);
}
} /// <summary>
/// Logs the fatal error message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
/// <param name="arg2">The arg2.</param>
public void FatalFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1, arg2));
Console.WriteLine(m_MessageTemplate, m_Name, m_Fatal, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Fatal, log);
}
} /// <summary>
/// Logs the info message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
public void Info(bool isWriteFile,object message)
{
string log = GetDataTimeLog(message.ToString());
Console.WriteLine(m_MessageTemplate, m_Name, m_Info, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name,m_Info,log);
}
} /// <summary>
/// Logs the info message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
/// <param name="exception">The exception.</param>
public void Info(bool isWriteFile, object message, Exception exception)
{
string log = GetDataTimeLog(message + Environment.NewLine + exception.Message + exception.StackTrace);
Console.WriteLine(m_MessageTemplate, m_Name, m_Info, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Info, log);
}
} /// <summary>
/// Logs the info message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
public void InfoFormat(bool isWriteFile, string format, object arg0)
{
string log = GetDataTimeLog(string.Format(format, arg0));
Console.WriteLine(m_MessageTemplate, m_Name, m_Info, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Info, log);
}
} /// <summary>
/// Logs the info message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void InfoFormat(bool isWriteFile, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Info, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Info, log);
}
} /// <summary>
/// Logs the info message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="provider">The provider.</param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void InfoFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(provider, format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Info, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Info, log);
}
} /// <summary>
/// Logs the info message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
public void InfoFormat(bool isWriteFile, string format, object arg0, object arg1)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1));
Console.WriteLine(m_MessageTemplate, m_Name, m_Info, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Info, log);
}
} /// <summary>
/// Logs the info message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
/// <param name="arg2">The arg2.</param>
public void InfoFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1, arg2));
Console.WriteLine(m_MessageTemplate, m_Name, m_Info,log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Info, log);
}
} /// <summary>
/// Logs the warning message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
public void Warn(bool isWriteFile,object message)
{
string log = GetDataTimeLog(message.ToString());
Console.WriteLine(m_MessageTemplate, m_Name, m_Warn, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name,m_Warn,log);
}
} /// <summary>
/// Logs the warning message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="message">The message.</param>
/// <param name="exception">The exception.</param>
public void Warn(bool isWriteFile, object message, Exception exception)
{
string log = GetDataTimeLog(message + Environment.NewLine + exception.Message + exception.StackTrace);
Console.WriteLine(m_MessageTemplate, m_Name, m_Warn, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Warn, log);
}
} /// <summary>
/// Logs the warning message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
public void WarnFormat(bool isWriteFile, string format, object arg0)
{
string log = GetDataTimeLog(string.Format(format, arg0));
Console.WriteLine(m_MessageTemplate, m_Name, m_Warn, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Warn, log);
}
} /// <summary>
/// Logs the warning message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void WarnFormat(bool isWriteFile, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Warn, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Warn, log);
}
} /// <summary>
/// Logs the warning message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="provider">The provider.</param>
/// <param name="format">The format.</param>
/// <param name="args">The args.</param>
public void WarnFormat(bool isWriteFile, IFormatProvider provider, string format, params object[] args)
{
string log = GetDataTimeLog(string.Format(provider, format, args));
Console.WriteLine(m_MessageTemplate, m_Name, m_Warn, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Warn, log);
}
} /// <summary>
/// Logs the warning message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
public void WarnFormat(bool isWriteFile, string format, object arg0, object arg1)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1));
Console.WriteLine(m_MessageTemplate, m_Name, m_Warn, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Warn, log);
}
} /// <summary>
/// Logs the warning message.
/// </summary>
/// <param name="isWriteFile"></param>
/// <param name="format">The format.</param>
/// <param name="arg0">The arg0.</param>
/// <param name="arg1">The arg1.</param>
/// <param name="arg2">The arg2.</param>
public void WarnFormat(bool isWriteFile, string format, object arg0, object arg1, object arg2)
{
string log = GetDataTimeLog(string.Format(format, arg0, arg1, arg2));
Console.WriteLine(m_MessageTemplate, m_Name, m_Warn, log);
if (isWriteFile)
{
LogUtil.WriteLogFile(m_Name, m_Warn, log);
}
}
}
}
LogFactory 日志工厂
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BenXH.Log.Log
{
public class LogFactory:ILogFactory
{
/// <summary>
/// 创建日志实例
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public ILog GetLog(string name)
{
return new Log(name);
}
}
}
LogUtil日志格式化
using BenXH.Log.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BenXH.Log.Log
{
internal class LogUtil
{
/// <summary>
/// 格式式化Log信息
/// </summary>
/// <param name="format"></param>
/// <param name="name"></param>
/// <param name="logType"></param>
/// <param name="log"></param>
/// <returns></returns>
private static string GetLogString(string name, string logType, string log)
{
return String.Format("[{0}]{1}-{2}: {3}", DateTime.Now.ToString("HH:mm:ss"),name, logType, log);
} /// <summary>
/// 获得日志要保存的路径
/// </summary>
/// <param name="name"></param>
/// <param name="logType"></param>
/// <returns></returns>
private static string GetLogPath(string name, string logType)
{
string path = AppDomain.CurrentDomain.BaseDirectory+"Log";
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
} return System.IO.Path.Combine(path,String.Format("{0}_{1}_{2}.log",DateTime.Now.ToString("yyyy-MM-dd"),name,logType));
} public static void WriteLogFile(string name, string logType, string log)
{
string logPath = GetLogPath(name, logType); FileUtil.WriteAppend(logPath,log);
}
}
}
最后就是一个日志信息的显示和文件的存储 FileUtil
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text; namespace BenXH.Log.Common
{
public static class FileUtil
{
/// <summary>
/// 追加内容到指定文件中
/// </summary>
/// <param name="filePath"></param>
/// <param name="content"></param>
public static void WriteAppend(string filePath, string content)
{
WriteAppend(filePath,new string[]{content});
} public static void WriteAppend(string filePath, string[] contents)
{
//System.IO.StreamWriter sr = new System.IO.StreamWriter(filePath, true);
//foreach (string c in contents)
//{
// sr.WriteLine(c);
//}
//sr.Flush();
//sr.Close(); using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
{
fs.Seek(fs.Length, SeekOrigin.Current); string content = String.Join(Environment.NewLine, contents) + Environment.NewLine; byte[] data = System.Text.Encoding.UTF8.GetBytes(content); fs.Write(data, , data.Length); fs.Close();
}
}
}
}
测试代码:
Test.cs
class Test
{
static void Main(string[] args)
{
//日志BenXH的Debug信息
new BenXH.Log.Log.LogFactory().GetLog("BenXH").Debug(true, "Hello");
new BenXH.Log.Log.LogFactory().GetLog("BenXH").Debug(true, "World"); //日志BenXH的info信息
new BenXH.Log.Log.LogFactory().GetLog("BenXH").Info(true, "Hello");
new BenXH.Log.Log.LogFactory().GetLog("BenXH").Info(true, "BenXH");
Console.Read();
}
}
运行结果:

文件:程序运行根目录下Log文件夹

Log文件夹下新创建俩个文件DEBUG和INFO

文件:2017-07-29_BenXH_DEBUG.log
文件内容
[17-07-29 16:01:26]>>Hello
[17-07-29 16:01:26]>>World
文件:2017-07-29_BenXH_INFO.log
文件内容:
[17-07-29 16:01:26]>>Hello
[17-07-29 16:01:26]>>BenXH
工程源文件下载
C#日志记录设计与实现(BenXHLog)的更多相关文章
- TP5数据库数据变动日志记录设计
根据网友的设计进行了部分调整: 用户分为管理员admin表和用户user表 记录操作表数据 增删改: insert/delete/update <?php /** * OperateLog.ph ...
- TinyFrame升级之六:全局日志的设计及实现
日志记录显然是框架设计中不可或缺的元素,在本框架中,我们将使用log4net作为日志记录的主体.下面来具体说明如何让框架继承log4net,并通过Autofac进行IOC注入. 首先,定义好我们的Lo ...
- Java日志记录的事儿
一.java日志组件 1.common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的 ...
- IT第二十天 - 面向对象编程思想、抽象类、异常处理、程序操作日志记录、本周总结 ★★★
IT第二十天 上午 面向对象编程思想 1.组装电脑的设计: (1)电脑的组成:显示器+机箱 (2)机箱的组成:电源+主板+硬盘 (3)主板所包含的部件:cpu+内存+PCI接口+usb接口 (4)PC ...
- 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大
讲到log4j,现在国外基本是没有开发者用这个框架了,原因大致有几点,1.功能太少:2.效率低下:3.线程锁bug等等等各种莫名其妙的bug一直都没解决. 其实最重要的是log4j的作者自己也放弃了l ...
- 来一手 AOP 注解方式进行日志记录
系统日志对于定位/排查问题的重要性不言而喻,相信许多开发和运维都深有体会. 通过日志追踪代码运行状况,模拟系统执行情况,并迅速定位代码/部署环境问题. 系统日志同样也是数据统计/建模的重要依据,通过分 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...
- 从壹开始前后端分离 [.netCore 不定期更新 ] 三十五║ 完美实现全局异常日志记录
缘起 哈喽我是不定期更新的日常,昨天群里小伙伴问到了记录日志,当然,以前我也挖过这个坑,后来一直没有来得及填上,也想着 swagger 一直又有错误信息展示的功能,就迟迟没有添加这个功能,不过昨天夜里 ...
- Python开发之日志记录模块:logging
1 引言 最近在开发一个应用软件,为方便调试和后期维护,在代码中添加了日志,用的是Python内置的logging模块,看了许多博主的博文,颇有所得.不得不说,有许多博主大牛总结得确实很好.似乎我再写 ...
随机推荐
- Java LinkedList工作原理及实现
1. 概述 以双向链表实现.链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作. 按下标访问元素—get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组 ...
- 隐藏控件--HiddenField控件
HiddenField控件百度查的结果(帮助大家对比理解): HiddenField控件顾名思义就是隐藏输入框的服务器控件,它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据.也许这个时候应 ...
- Html5游戏框架createJS组件--EaselJS
CreateJS库是一款HTML5游戏开发的引擎,是一套可以构建丰富交互体验的HTML5游戏的开源工具包,旨在降低HTML5项目的开发难度和成本,让开发者以熟悉的方式打造更具现代感的网络交互体验. 掌 ...
- mipmap和drawable文件夹的区别
在Android上创建工程,会默认创建mipmap文件夹.之前在Eclipse上创建的是drawable的文件夹.那么这两个有什么区别呢? 问题: I'm working with android s ...
- Android性能优化-内存优化
原文链接 Manage Your App’s Memory 前言 在任何软件开发环境中,RAM都是比较珍贵的资源.在移动操作系统上更是这样,因为它们的物理内存通常受限.尽管在ART和Dalvik虚拟机 ...
- Apache Kafka学习 (二) - 多代理(broker)集群
1. 配置server.properties > cp config/server.properties config/server-1.properties> cp config/ser ...
- eclipse plugin development -menu
org.eclipse.ui.menus locationURI MenuContribution locationURI = "[Scheme]:[id]?[argument-list]& ...
- 【PMP】项目采购管理~重点知识
1.合同的类型与区别 固定总价(FFP):大多数买方都喜欢这种合同,因为货物的采购价格在一开始就已确定,并且不允许改变(除非工作范围发生变更) 总价加激励费用(FPIF):这种总价合同给买方和卖方提供 ...
- 使用 bibtex4word 实现在 office word 中管理并插入参考文献
使用 bibtex4word 实现在 office word 中管理并插入参考文献, 简单的步骤流程如下: 1. 下载bibtex4word.zip (无需安装): 下载地址: http://www ...
- Axure RP for Mac(网站交互式原型设计工具)破解版安装
1.软件简介 Axure RP 是 macOS 系统上一款最知名和最强大的原型设计工具,增加了大量新的特性,如应用多个动画,并同一时间运行一个小部件,如褪色,同时移动等,而且具有全新的图标和界面 ...