Метод ведения журнала с возможностью String.Format

У меня есть метод журнала общего назначения, который записывает записи в файл журнала, журнал событий и т. Д.

public static void Log(string logEntry)
{
    // Write DateTime and logEntry to Log File, Event Log, etc.
}

Я создал перегрузку для обеспечения функциональности String.Format(), используя следующее:

public static void Log(params object[] logEntry)
{
    // Purpose: Overload Log method to provide String.Format() functionality
    //          with first parameter being Format string.
    // Example: Log("[{0:yyyy-MM-dd}] Name: {1}, Value: {2:#,##0.00}", DateTime.Now, "Blah, Blah, Blah", 12345.67890)

    string formatString = logEntry[0].ToString();

    object[] values = new object[logEntry.Length - 1];

    for (int i = 1; i < logEntry.Length; i++)
    {
        values[i - 1] = logEntry[i];
    }

    Log(String.Format(formatString, values));
}

Это работает нормально, но есть ли лучший способ ссылки на оставшиеся элементы массива для передачи в функцию String.Format()? Или лучший способ удалить элемент 0 из массива?

Я знаю, что мог бы также просто использовать Log(String.Format(...), но предоставляю это для более формальных целей.

2 ответа

Решение

Вы могли бы использовать

public void Log(string message, params object[] args)

или еще лучше, используйте существующую платформу, например, NLog или Log4Net, которые имеют такие API, как

public void Log(LogLevel level, string message, param object[] args)

а также

public void Log(LogLevel level, Exception exception, string message, param object[] args)

Я бы соответствовал параметрам String.Format(),

public static void Log(string logEntry)
{
    Log(logEntry, null);
}

public static void Log(string logEntry, params object[] values)
{
   // Do whatever extra processing you need here.
   Log(String.Format(logEntry, values));
}
Другие вопросы по тегам