简体   繁体   中英

log4net items not shown in AppServiceAppLogs

We are using log.net for our application logging in azure. We configured it according to this document , the logs are stored in

d:/home/LogFiles/Application/Log4netfile-[%processid].txt

we can download the files from https://xxxx.scm.azurewebsites.net/api/dump and I can also see them in Log stream, there it looks like this

2022-02-06T18:22:57  PID[29616] Verbose     log4net: Adding appender named [FileAppender] to logger [root].
2022-02-06T18:22:57  PID[29616] Verbose     log4net: Hierarchy Threshold []
2022-02-06T18:22:58  PID[29616] Verbose     LOG4NET Fatal LOG4NET LOG4NET
2022-02-06T18:22:58  PID[29616] Verbose     LOG4NET Debug Message Message

Line items like:

log4net: Adding appender named  

are created by log.net during internal setup (using debug=true), and those show up in our AppServiceAppLogs, however, items which are genereted by the logger using:

Logger.Fatal("LOG4NET Fatal LOG4NET LOG4NET");

are visible in stream and files but they are not showing up in AppServiceLogs.

I tried multiple different appenders the only one which shows up in Log-Streams and in files is FileAppender (or RollingFileAppender), all others are not showing in LogStreams or (as expected) in the files.

Based on this https://learn.microsoft.com/en-us/azure/app-service/troubleshoot-diagnostic-logs#send-logs-to-azure-monitor I assume that everything writen to the files should be than sent to azure-monitor - but in our case this is not hapening. Could you provide some reference about implementation / code how the sending of the files is done, and which process does that?

I am wandering is there anything which we could configure differently to get the log-items to end up in AppServiceLogs? Or should we use some other appender?

I am aware of the issue in AspNetTraceAppender and I am trying to avoid implementation of new appender.

There are a few things you can look into:

Call log.net configure before writing to your log file (only once is enough):

log4net.Config.XmlConfigurator();

or

log4net.Config.XmlConfigurator.Configure();

and then you can add flushing to your configuration:

<appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender">
  <param name="ImmediateFlush" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <!-- can be any pattern you like -->
    <conversionPattern value="%logger - %message" />
  </layout>
</appender>

Immediately, this will flush the message.

In Global.asax, To make log.net read your configuration.

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}

Make sure Azure Diagnostics has configured to all information needed for debugging.

After that, you can enable internal log.net debugging. Refer internal debugging on this log.net faq page . Standard it should log to your listener you have configured. To the trace element Add the autoflush="true" option. Or find directory on the worker role you can write to and access to read your logs.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM