For error event logging, or even for application function or method completion logging, the performance of the reflection calls are usually not an issue. Especially since it would usually be preferable to use the reflection calls over having a named string in each class and method.
Calls to MethodBase should not be used in any performance critical sections. In those cases the reflection values should be cached prior to use if possible, or alternative objects used, such as the aforementioned named strings.
eg. Log (m_zClassName, zMethodName, "Method Wizbot completed.");
Benchmark
In benchmarks on my i7-2600k each call to MethodBase.GetCurrentMethod() is approximately 1600 nanoseconds (0.0016 milliseconds).
Improvement
That being said, the code posted by the OP can be significantly improved for performance by not calling MethodBase.GetCurrentMethod() twice, since what we want are two members of the same object.
The OP's code (with some formatting) = ~3200ns in two MethodBase.GetCurrentMethod() calls:
Log(String.Concat(MethodBase.GetCurrentMethod().DeclaringType.Name, ".", MethodBase.GetCurrentMethod().Name, " : Error is blah blah");
Which can perform twice as fast by simply passing the reference to the MethodBase object to the event log writing method = ~1600ns in one MethodBase.GetCurrentMethod() call:
EventLogWrite(MethodBase.GetCurrentMethod(), "Error is blah blah");
And the event log writing method:
public static void EventLogWrite(MethodBase methodBase, string zErrorMessage)
{
string classname = methodBase.DeclaringType.Name;
string methodname = methodBase.Name;
string logmessage = String.Concat(classname, ".", methodname, " : ", zErrorMessage);
// ... write message to event log file
}
Plus with this design you don't need to type all of that String.Concat and field separators in every instance of the call to the event log writing method.