visual studio structured net name logger log configuracion application .net logging permissions clickonce log4net

.net - studio - log4net structured logging



¿Dónde puedo escribir mi archivo de registro de log4net en ClickOnce? (2)

Cuando ejecuto mi aplicación localmente, escribo mi log4net log en la ubicación que he configurado (es decir, <file value="${LOCALAPPDATA}/TEST/Logs/debug.log" /> ) sin ningún problema. Sin embargo, cuando despliegue mi aplicación a través de ClickOnce, el archivo de registro no se está escribiendo.

Sé que las aplicaciones de ClickOnce están limitadas en cuanto a dónde pueden escribir, pero tenía la impresión de que LOCALAPPDATA (por ejemplo, C: / Users / me / AppData / Local) era un juego justo.

¿Algunas ideas?



Con ClickOnce, las reglas de la carpeta son algo diferentes a las de las aplicaciones normales de Windows. La carpeta de datos, donde se implementan los archivos de contenido de ClickOnce, se encuentra en c: / Users / me / Configuración local / Aplicaciones / 2.0 / Datos. Debajo de esa carpeta hay un par de niveles de subcarpetas con identificadores bastante crípticos.

Por lo tanto, la mejor carpeta de datos para una aplicación ClickOnce determinada es la clase ApplicationDeployment . También debe verificar la propiedad IsNetworkDeployed para ver si se está ejecutando en modo desplegado:

if (ApplicationDeployment.IsNetworkDeployed) { var dataDirectory = ApplicationDeployment.CurrentDeployment.DataDirectory; ... }

Dado que ClickOnce decide DataDirectory, no hay manera de que pueda codificar esa ruta en su configuración de log4net. Mi sugerencia sería modificar las rutas de archivos programáticamente al inicio de la aplicación.

foreach(var appender in LogManager.GetRepository().GetAppenders()) { var fileAppender = appender as FileAppender; if (fileAppender != null) { fileAppender.File = fileAppender.File.Replace("${LOCALAPPDATA}", dataDirectory); fileAppender.ActivateOptions(); } }