Come specificare il percorso del file di registro utilizzando le posizioni delle cartelle in Windows con il configuratore xml log4net?

StackOverflow https://stackoverflow.com/questions/3338055

Domanda

Nel mio app.config ho messo

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="%programdata%/log-file.txt"/>

ma non ha funzionato.Qualche idea?

È stato utile?

Soluzione

La sintassi log4net per l'espansione delle variabili di ambiente è "${Variable}", ad es

<file value="${LOCALAPPDATA}\GojiSoft\GojiLog\log.txt" />

Altri suggerimenti

Riesumo un vecchio thread qui, ma ho riscontrato lo stesso problema e ho pensato di condividerlo.

${PROGRAMDATA}, come discusso nel thread di commento dell'altra risposta, non ha funzionato per me (come per OP).Tuttavia, ho visto un commento da qualche parte sul fatto che fa distinzione tra maiuscole e minuscole.Ho provato ${ProgramData} e abbastanza sicuro, ha funzionato bene.

Usa ${APPDATA} invece di ${LOCALAPPDATA}

Abbiamo riscontrato che quando si utilizza Log4Net con DotNetCore e le variabili di ambiente del metodo di estensione Microsoft.Extensions.Logging.Log4NetProvider non vengono passate.Questo perché il configuratore log4net viene configurato analizzando il file di configurazione log4net in XML prima di passarlo al configuratore log4net che ignora la sostituzione della variabile di ambiente.Tuttavia, puoi sovrascrivere le proprietà procedendo come segue:

hostBuilder.ConfigureLogging(logBuilder =>
            {
                var logsPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
                logBuilder.AddLog4Net(new Log4NetProviderOptions
                    {
                        PropertyOverrides = new List<NodeInfo>
                        {
                            new NodeInfo
                            {
                                XPath = "//appender[@name='rollingFile']//file",
                                Attributes = new Dictionary<string, string>
                                {
                                    {
                                        "value", Path.Combine(logsPath, "Application.log") 
                                    }
                                }
                            }
                        }
                    });
            });
<log4net>
  <root>
    <level value="INFO" />
    <appender-ref ref="console" />
    <appender-ref ref="rollingFile" />
  </root>
  <appender name="console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level - %message%newline" />
    </layout>
  </appender>
  <appender name="rollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="Application.log" /> <!--This is overidden at run time. Based on the appender name: rollingFile.-->
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
    </layout>
  </appender>
</log4net>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top