2009-12-21 18 views
11

¿Cómo puedo iniciar sesión en carpetas especiales (por ejemplo, %APPDATA%) utilizando el archivo app.config?¿Cómo puedo iniciar sesión en Carpetas especiales con log4net?

Puedo hacerlo programáticamente, pero necesito poder usar el archivo app.config para la configuración. He visto una publicación sobre el uso de %envFolderPath. No está disponible en la versión más reciente, pero solo en su último código.

A continuación se muestra el código que configura el registro en carpetas especiales mediante programación.

public void ExampleLog 
{ 
    XmlConfigurator.Configure(); 

    var fileName = GetFileName(); 
    var appender = new log4net.Appender.RollingFileAppender 
    { 
     Layout = new log4net.Layout.PatternLayout("%d - %m%n"), 
     File = fileName, 
     MaxSizeRollBackups = 10, 
     MaximumFileSize = "100MB", 
     AppendToFile = true, 
     Threshold = Level.Debug 
    }; 

    appender.ActivateOptions(); 
    BasicConfigurator.Configure(appender); 
} 

private static string GetFileName() 
{ 
    const string subPath = "MySubFolder"; 
    var path = String.Format(@"{0}\{1}", Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData), subPath); 
    const string logName = "Log.txt"; 
    return Path.Combine(path, logName); 
} 
+1

posible duplicado de [Cómo especificar la carpeta de datos de aplicación común para log4net?] (Http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for- log4net) –

Respuesta

11

Bastante seguro que la sintaxis para esto está disponible en la versión actual.

<file type="log4net.Util.PatternString" value="%env{APPDATA}\\MyApp\\Log.txt" /> 

Si necesita algo más, se puede mirar en la opción de crear subclases de la clase PatternString, tal como se describe aquí: Log4Net can’t find %username property when I name the file in my appender

+0

Lo siento por la respuesta tardía. ¡Gracias! – user9969

+0

No creo que sea una buena idea, porque en Vista y Windows 7,% APPDATA% se resuelve en el directorio * roaming * del usuario, lo que significa que los archivos de registro se sincronizarán con el servidor de dominio y se descargarán cada vez que el usuario registre pulg. Vea el comentario aquí: http://stackoverflow.com/questions/1572934/where-to-store-an-application-log-file-on-windows/1573015#1573015 – GuyBehindtheGuy

+2

Si le preocupa la tiempo para sincronizar los datos de roaming, luego use% LOCALAPPDATA% (el equivalente no roaming). Creo que, en cualquier caso, sería mejor para los archivos de registro, independientemente de lo grandes que sean. –

4

Mira la muestra de configuración RollingFileAppender en la documentación log4net (para todos los demás parámetros) .

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="log.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="100KB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.SimpleLayout" /> 
    </layout> 
</appender> 

que he referenciado variables de entorno (incluyendo carpetas especiales) con el log4net básica de formato variable ${NAME}. Y la etiqueta file no necesita tener el PatternLayout especificado, está implícito.

<file value="${APPDATA}\log.txt" /> 
Cuestiones relacionadas