Как добавить нумерацию в LogFile?

Я сохраняю сообщения журнала в моем файле logtext.txt. Я хочу указать нумерацию сообщений журнала в этом файле. Есть ли какое-либо решение для достижения этой цели? Ниже мой код:

// Create a writer and open the file:
StreamWriter log;

if (!File.Exists(AssetXMLLogMessagesPath + ".txt"))
{
    log = new StreamWriter( AssetXMLLogMessagesPath + ".txt", true);
}
else
{
    log = File.AppendText(AssetXMLLogMessagesPath + ".txt");
}                

// Write to the file:
log.WriteLine(" "+"<------------------------------"+" AssetImporter at "+":" +" "+ DateTime.Now.ToString("F") + "--------------------------------------->");
log.WriteLine(msg);                
log.WriteLine();

// Close the stream:
log.Close();

2 ответа

Вы должны сохранить номер сообщения самостоятельно. Поэтому я бы создал класс, который отвечает за функциональность регистрации. Там вы добавляете недвижимость LogEntries который увеличивается с каждым новым лог-сообщением.

Например:

public static class VerySimpleLogger
{
    public static string Path{ get; set; }
    public static int LogEntries { get; set; }
    public static bool WithTimeStamp { get; set; }

    public static void Log(string message)
    {
        LogEntries++;
        if(WithTimeStamp)
            message = string.Format("{0}. {1}:\t{2}{3}", LogEntries, DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(), message, Environment.NewLine);
        else
            message = string.Format("{0}.\t{1}{2}", LogEntries, message, Environment.NewLine);
        File.AppendAllText(Path, message);
    }
}

Использование:

VerySimpleLogger.Path = @"C:\Temp\logtext.txt";
for (int i = 1; i <= 100; i++)
{
    VerySimpleLogger.Log("Log-message #" + i);
}

Но обратите внимание, что LogEntries число будет ноль снова, если вы перезапустите программу. Он не будет считать строки в файле. Так что это может быть идеально подходит для инструментов, где вам нужно создать лог-файл для одного выполнения или для долго работающих приложений, таких как windows-сервисы. Если это приложение winforms, которое используется от нескольких пользователей, и все должны использовать один и тот же файл журнала, это нецелесообразный подход.

Вы можете попробовать так:-

public sealed class LineCounter : PatternLayoutConverter
{       
    private static int i= 0;

    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        LineCounter.i++;
        writer.Write(LineCounter.i.ToString());
    }
}
Другие вопросы по тегам