Как получить всю информацию журнала в веб-API 2, используя log4net - PullRequest
0 голосов
/ 06 июля 2018

Я создал WEB API. Теперь я хочу создать файл журнала, в который я хочу получить всю информацию журнала API. Для этого с помощью log4net я создал файл журнала.

  1. Скачал его с NuGet.
  2. Добавить log4net в web.config файл

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
    <log4net>
    <root>
      <appender-ref ref ="LogFileAppender"/>
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="E:\MyLog\LogFile.txt"/>
    <param name="AppendToFile" value ="false"/>
    <rollingStyle value="Size"/>
    <maxSizeRollBackups value="10"/>
    <maximumFileSize value="5MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %meesage%newline"/>
    </layout>
    </appender>
    <logger name="ApiLog">
    <level value="DEBUG"/>
    </logger>
    </log4net>
    
  3. В моем Global.asax.cs файле

    private static readonly ILog log = LogManager.GetLogger("ApiLog");

    protected void Application_Start()
    {
        log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config")));           
    
    }
    protected void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        log.Debug("++++++++++++++++++++++++++++");
        log.Error("Exception - \n" + ex);
    
        log.Debug("++++++++++++++++++++++++++++");
    }
    

Контроллер

public class MetersController : ApiController
{
    public mdcEntities mdcEntitites = new mdcEntities();

    public HttpResponseMessage GetByMsn(string msn, DateTime dt)
    {
        try
        {
            var dateTime = dt.AddHours(-1);

            var result = mdcEntitites.tj_xhqd.Where(m => (m.zdjh == msn) && (m.sjsj >= dateTime))
                                             .OrderByDescending(o => o.sjsj)
                                             .Select(s => s.sjsj)
                                             .FirstOrDefault();

            DateTime resulted = new DateTime();
            DateTime userSent = new DateTime();

            resulted = Convert.ToDateTime(result);
            userSent = Convert.ToDateTime(dt);

            double diff = Math.Abs((resulted - userSent).TotalMinutes);

            if (diff <= 10)
            {
                return Request.CreateResponse(HttpStatusCode.OK, new { data = new { Response = "Yes" } });
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.OK, new { data = new { Response = "No" } });
            }
        }
        catch (Exception ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
        }
    }
}

Теперь, когда я запустил этот API, он создал файл журнала, но он пуст, потому что он будет регистрировать только ошибки.

Как посмотреть весь журнал всех процессов, включая начальную и конечную временную шкалу?

Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 06 июля 2018

Если вы хотите вести журнал для всех методов, вам нужно добавить журнал в начале и конце каждого метода, например:

    public HttpResponseMessage GetByMsn(string msn, DateTime dt)
    {
            try
            {
               Log.Debug(String.Format("{0} started",  MethodBase.GetCurrentMethod().Name;));
               ...
               Log.Debug(String.Format("{0} succeeded",  MethodBase.GetCurrentMethod().Name;));
            } 
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
            }
   }

ИЛИ

альтернативная необходимость фильтр настраиваемых действий , который запускает журнал после каждого метода, как указано в ссылке ниже:

https://www.c -sharpcorner.com / UploadFile / db2972 / остаточный веб-апи-исполнения-время, используя обычай действия фильтр /

...