是否可以在日志文件中插入自定义行作为第一行?

Is it possible to insert a custom line as the first line in a log file?

我为 Web 服务应用程序创建了一个自定义日志文件,我们想在其中记录处理请求的时间。我们希望它采用 .csv 格式,因为这样更易于阅读。

我已经成功配置了一个附加程序,我在其中自定义了日志输出,所以它只输出以逗号分隔的日期和消息。

<log4net>
<appender name="TimingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value=".\App_Data\Logs\" />
      <datePattern value="'GetInstallationsTiming.log_'yyyy-MM-dd'.txt'" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <appendToFile value="true" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout, log4net">
        <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss},%message%newline" />
      </layout>
    </appender>
<logger name="GetInstallationsTimingLog" addivity="false">
      <level value="All"></level>
      <appender-ref ref="TimingLogFileAppender" />
    </logger>
  </log4net>

我想知道是否可以将自定义行作为第一行,这基本上是 header,比如日期、以毫秒为单位的时间、联系人电子邮件、[=18] 的数量=]?

如果你使用自定义的东西,你可以这样写:

  public static void Logger(string lines)
    {
        string path = "C:/Log/";
        VerifyYourPath(path);
        string fileName = DateTime.Now.Day.ToString() + DateTime.Now.Month.ToString() +
       DateTime.Now.Year.ToString() + "_Logs.txt";
        if (Exist(fileName))// Check you already have this file or not
        {
            // add the new lines to exisiting file
        }
        else
        {
            try
            {
                System.IO.StreamWriter file = new System.IO.StreamWriter(path + fileName, true);
                var title = DateTime.Now.ToString()/*What you want*/;
                file.WriteLine(title + ": " + lines);
                file.Close();
            }
            catch (Exception) { }
        }
    }

您可以添加您想要的而不是 DateTime.Now.toString()。如果你愿意,你也可以检查它是否是第一行。

您使用的是标准的 RollingFileAppender (log4net.Appender.RollingFileAppender)。你说 'custom appender',这可能意味着你编写了一种新型的 appender。

标准的 RollingFileAppender 可以像这样配置 header:

<layout type="log4net.Layout.PatternLayout">
​    <header type="log4net.Util.PatternString" value="%newlineLOG START- %env{COMPUTERNAME} - %appdomain - UTC Time: %utcdate Local time: %date %newlineNOTE: All events are logged using UTC time.%newline"/>

这将在每次应用程序启动时将以下行添加到日志中:

LOG START- MyComputer- MyApp.exe - UTC Time: 2019-08-05 12:07:26,641 Local time: 2019-08-05 14:07:26,643
NOTE: All events are logged using UTC time.

每次开始记录时都会添加 header 文本,而不是只在顶部添加一次,因此这可能不是您想要的。