Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log a message with a variable number of printf-style arguments

I'm trying to implement a C# method that can log a message with a format string and a variable number of printf-style arguments. Ideally, it would work identically to the C function I pasted below, although idiomatic to C# of course.

static
void
LogMessage(const char * iFormat, ...)
{
  va_list argp;
  FILE * fp;

  fp = fopen("log.txt", "a");
  if (fp != NULL) {
    va_start(argp, iFormat);
    vfprintf(fp, iFormat, argp);
    va_end(argp);
    fprintf(fp, "\n");
    fclose(fp);
  }
}

This function is convenient for me, as it allows me to make the following calls:

LogMessage("Testing");
LogMessage("Testing %s", "1 2 3");
LogMessage("Testing %d %d %d", 1, 2, 3);
like image 501
Emerick Rogul Avatar asked Jun 05 '09 20:06

Emerick Rogul


2 Answers

static void LogMessage(string format, params object[] args) {
    File.AppendAllText("log.txt", string.Format(format, args));
}

LogMessage("Testing {0} {1}", 1, "hi");
like image 182
Jimmy Avatar answered Oct 21 '22 22:10

Jimmy


You want to create a variadic function

C# uses the params keyword to do this

static void LogMessage(string formatString, params string[] formatArguments)
{
    string.Format(formatString, formatArguments);
}

Please note that the params keyword can only be used on the last parameter in the method signature and that it requires the parameter to be an array.

This is merely syntactic sugar for actually passing an array.

like image 41
dss539 Avatar answered Oct 21 '22 21:10

dss539