Logging MethodBase.GetCurrentMethod().Name Results in “MoveNext”

Using log4net, the following code example has always (that I’ve paid attention to) successfully written the method name to the log:

CODE:
catch (Exception ex)
{
  globalMgr.Logger.Debug($”Exception thrown in  {MethodBase.GetCurrentMethod().Name} {ex.Message}  {ex.StackTrace} “);
  return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);

LOG TEXT:
Starting HttpClient in GetStoreData()

Lately, however, the method base is logged as “MoveNext.”

LOG TEXT:
Starting HttpClient in MoveNext

The reason for this is that I’m placing the GetCurrentMethod call inside an async method.   Therefore, the final method that the code lives is indeed in “MoveNext.” 

If I don’t get back with a solution soon enough, hard-code your method names into the logging but do not tell anyone I told you to do such a thing.

.NET: Using A Single log4net Configuration File Across A Multi-Tier Web Application

log4net is
a tool to help the programmer output log statements to a variety of output
targets.



This
example is written in Visual Studio 2015 for a WebAPI2 solution.  The sample solution consists of three projects
that include a project for data, models, unit tests, etc.  Source code can be found here:



https://github.com/cjsander/Log4netInMultiTierWebApp

SETUP:
1.     
Create
your project and then import the following Nuget package:        
https://www.nuget.org/packages/log4net/
2.     
For
each project, add reference to log4net.dll assembly.  Though all configuration will be in the  main
API project, other projects will require the assembly reference as well.
3.     
Configuration
files to be included are:
a.       Log4net.config
b.      Web.config
c.       Settings.xml
d.      Global.asax.cs
4.     
Note
that the <appsettings> node of the web.config file has been abstracted
into a separate file — Settings.xml.  
These settings will be referenced in the web.config in the following
line of code:

         <appSettings file=c:webappslog4sampleconfigsettings.xml/>

APPLICATION:
1.       In your web.config file, enter the
following:
  <configSections>
    <section name=log4net type=log4net.Config.Log4NetConfigurationSectionHandler,
log4net
/>
  </configSections>
2.       Now, add the logging configuration
values.  These can be added in your
web.config(or app.config) but in this scenario, it has its own configuration
file – log4net.config:
<log4net>
 
<
appender name=RollingFile type=log4net.Appender.RollingFileAppender>…..
</log4net>

3.       Then,
you will want to add the path to the file in your <appSettings> node:
<add key=logPath value=c:webappslog4sampleconfiglog4net.config />
4.       In your
Global.asax file, add the following to the Application_Start() method:
//log4net setup:
var logPath = (ConfigurationManager.AppSettings[“logPath”]);

log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(logPath));

EXTRA:
You can also
add a helper method to customize your logging and add details that would help
with your debugging:
public class Log4NetHelper
    {
public string LogMsg(Message m, [Optional] string exceptionMsg, [CallerMemberName] string methodName = “”)
        {
            string msg = $”{methodName} {m} {exceptionMsg};
            return msg;
        }
}

               To
reference:
private readonly Log4NetHelper _msg = new Log4NetHelper();
_logger.Debug(_msg.LogMsg(Log4NetHelper.Message.InitialRequestStart));


SAMPLE FOLDER STRUCTURE: