方法一:以日期为日志文件名.
public void WriteLog(string msg)  
{  
    string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log";  
    if (!Directory.Exists(filePath))  
    {  
        Directory.CreateDirectory(filePath);  
    }  
    string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";  
    try  
    {  
        using (StreamWriter sw = File.AppendText(logPath))  
        {  
            sw.WriteLine("消息:" + msg);  
            sw.WriteLine("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));  
            sw.WriteLine("**************************************************");  
            sw.WriteLine();  
            sw.Flush();  
            sw.Close();  
            sw.Dispose();  
        }  
    }  
    catch (IOException e)  
    {  
        using (StreamWriter sw = File.AppendText(logPath))  
        {  
            sw.WriteLine("异常:" + e.Message);  
            sw.WriteLine("时间:" + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));  
            sw.WriteLine("**************************************************");  
            sw.WriteLine();  
            sw.Flush();  
            sw.Close();  
            sw.Dispose();  
        }  
    }  
}

利用泛型进行打印日志

/// <summary>
/// 打印日志
/// </summary>
/// <param name="msg"></param>
public static void WriteLog(string msg)
{
    string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log";
    if (!Directory.Exists(filePath))
    {
        Directory.CreateDirectory(filePath);
    }
    string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
    try
    {
        using (StreamWriter sw=File.AppendText(logPath))
        {
            sw.WriteLine("消息:" + msg);
            sw.WriteLine("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            sw.WriteLine("**************************************************");
            sw.WriteLine();
            sw.Flush();
            sw.Close();
            sw.Dispose();
        }
    }
    catch (IOException e)
    {
        using (StreamWriter sw = File.AppendText(logPath))
        {
            sw.WriteLine("异常:" + e.Message);
            sw.WriteLine("时间:" + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
            sw.WriteLine("**************************************************");
            sw.WriteLine();
            sw.Flush();
            sw.Close();
            sw.Dispose();
        }
    }
}
/// <summary>
/// 打印Model日志
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
public static void WriteLog<T>(T model) where T:class
{
    string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log";
    if (!Directory.Exists(filePath))
    {
        Directory.CreateDirectory(filePath);
    }
    string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
    try
    {
        using (StreamWriter sw = File.AppendText(logPath))
        {
            Type type = typeof(T);
            string msg = string.Join("*****", type.GetProperties().Select(m=>+":"+m.GetValue(model)));
            
            sw.WriteLine("消息:" + msg);
            sw.WriteLine("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            sw.WriteLine("**************************************************");
            sw.WriteLine();
            sw.Flush();
            sw.Close();
            sw.Dispose();
        }
    }
    catch (IOException e)
    {
        using (StreamWriter sw = File.AppendText(logPath))
        {
            sw.WriteLine("异常:" + e.Message);
            sw.WriteLine("时间:" + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
            sw.WriteLine("**************************************************");
            sw.WriteLine();
            sw.Flush();
            sw.Close();
            sw.Dispose();
        }
    }
}
方法二:以文档名称和日期结合作为文件名
public void WriteLog(string documentName, string msg)  
{  
    string errorLogFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log");  
    if (!System.IO.Directory.Exists(errorLogFilePath))  
    {  
        System.IO.Directory.CreateDirectory(errorLogFilePath);  
    }  
    string logFile = System.IO.Path.Combine(errorLogFilePath, documentName + "@" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt");  
    bool writeBaseInfo = System.IO.File.Exists(logFile);  
    StreamWriter swLogFile = new StreamWriter(logFile, true, Encoding.Unicode);  
    swLogFile.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "\t" + msg);  
    swLogFile.Close();  
    swLogFile.Dispose();  
}  
方法三: 使用log4net类库输出日志
  • 1.下载log4net类库 并选择项目对应的框架版本

下载地址

  • 2.添加log4net引用
  • 3 .建立配置文件Log4Net.config(名字自定义).文件内容参考,输出的文件名称可更改 .运行是要放入到相应bin/debug(release) 目录
 <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
  <configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
   </configSections>
 
 <log4net debug="true">
     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs/app.log" />
        <!--file可以指定具体的路径 eg : d:\\test.log。不指定的话log被生成在项目的bin/Debug 或者 bin/Release目录下 (web的项目 默认生成在根目录下)-->
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <!--备份log文件的个数最多10个-->
        <maximumFileSize value="2MB" />
        <!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
          <!--指定log的格式-->
          <conversionPattern value="[%date]  %thread -- %-5level -- %logger [%M] -- %message%newline" />
        </layout>
      </appender>
  
      <root>
        <level value="DEBUG" />
       <!--指定将此级别及以上的log打印到log文件中-->
       <appender-ref ref="RollingLogFileAppender" />
      </root>
    </log4net>
  </configuration>
  • 4 .在AssemblyInfo.cs中添加:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]   //配置文件名与之前建立的对应.
  • 5.在需要的输出日志的代码中加入:
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  • 6 .之后就可以使用:

log.info() … 等输出不同级别的日志了…