0

我在我的 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();
4

2 回答 2

0

你可以这样尝试:-

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());
    }
}
于 2013-09-13T15:18:29.770 回答
0

您必须自己保留消息编号。所以我会创建一个负责日志记录功能的类。在那里,您添加了一个属性,该属性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 应用程序并且所有用户都应该共享同一个日志文件,那么这不是一种可行的方法。

于 2013-09-13T15:50:19.073 回答