【问题标题】:How can I create a log file, one per day, in C# webpages to log info?如何在 C# 网页中每天创建一个日志文件以记录信息?
【发布时间】:2019-12-06 03:40:02
【问题描述】:

我有成功的代码在 OnPostAsync 期间创建并写入日志文件。 每次调用此页面时,它都会创建一个包含今天日期和时间的日志文件并写入日志文件。

我想每天创建一个日志文件并写入它。我可以将时间放在内容中,而不是创建一个以今天和时间命名的新文件。 我假设我检查了一个带有今天日期的日志文件,如果它不存在,我会写我的东西。如果它存在,我只是附加我的东西。

这是我用来为页面的每个帖子创建日志文件的内容:

var newFileName = "logs\\" + DateTime.Now.ToString().Replace("/","_").Replace(":","-").Replace(" ","__") + ".txt";
var webRootPath = _environment.WebRootPath;
var dataPath = Path.Combine(webRootPath, newFileName);

然后在 OnPostAsync 结束时,我写下我需要写的任何信息字符串。

var newCourseAfterSaveInfo = "New Course Saved ::: New Temp ID in Courses_New: blah blah blah ";

 System.IO.File.AppendAllLines(dataPath, new[] {newCourseAfterSaveInfo });

我已经在 VB 和 VBA 中完成了这项工作。如果文件不存在,正确的文件写入函数将创建一个文件和名称,否则它只会追加一行。但我不知道用 C# 来做这件事。

【问题讨论】:

  • 我试图在此找到一个问题来回答。您是否想知道它是否是首选方法?
  • 没有。我宁愿每天只创建一个日志文件并整天附加到它。目前我正在创建一个新的日志文件,只要有任何事情发生。因此,一天内发生了 7 次成功的 OnPostAsync 操作。对于所有这 7 个文件,我只想要一个日志文件。现在,我最终得到了 7 个日志文件。谢谢
  • 使用 Serilog 或 log4net,编写自己的记录器很少值得付出努力。根据大小或日期或两者轮换日志是一个已解决的问题。
  • 您正在使用 DateTime.Now.ToString() 方法,该方法将为您提供一个包含时间的名称。 DateTime.Now.ToString("MM-dd-yyyy") 一整天都是一样的。
  • Also: "向文件追加行,然后关闭文件。如果指定的文件不存在,则此方法创建文件,将指定的行写入文件,然后关闭文件..”来自docs.microsoft.com/en-us/dotnet/api/…

标签: c# logging system.io.file


【解决方案1】:

这是我在c#中使用的

1.将代码放入配置文件

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\Work\log\" />
  <appendToFile value="true"/>
  <countDirection value="-1"/>
  <rollingStyle value="Date" />
  <datePattern value="yyyyMMdd'.txt'" />
  <maxSizeRollBackups value="0" />
  <maximumFileSize value="10000KB" />
  <staticLogFileName value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t] %-5p %c - %m%n" />
  </layout>
</appender>

2.显示日志

string logFile = DateTime.Now.ToString("yyyyMMdd") + ".txt";
if (!System.IO.File.Exists(logFile))
{
    System.IO.File.Create(logFile);   
}
appendToLogFile(message);

【讨论】:

    【解决方案2】:

    我会在配置文件中使用带有适当命名约定的 Serilog 或 log4net。如果您想继续当前的方法,请使用以下内容指定当天的相同文件:

    var newFileName = "logs\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
    

    【讨论】:

      【解决方案3】:

      你可以在 C# 上试试这个。

      导入参考

      using System.IO;
      

      使用下面的代码。

       System.IO.StreamWriter file = new System.IO.StreamWriter(Application.StartupPath + @"\DataTransferedLogs" + DateTime.Now.ToString("MM-dd-yyyy") + ".txt", true);
                              string status1 = "Data Transfered for the Client:-" + clientname + "  at" + DateTime.Now.ToString();
                              file.WriteLine(status1);
                              file.Close();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-05
        • 2014-11-09
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 2013-06-10
        相关资源
        最近更新 更多