none
como obtener la ruta del sharedListener de un app.config RRS feed

  • Pregunta

  • hola necesito modificar el archivo .log  del tracelistener que se encuentra en el app.config

    para ello necesito llamar el initializeData y tomar el valor (la ruta) I:\LogFile\LogFile.log

    <add
        name="TextWriter"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="I:\Logfile\LogFile.log"
        traceOutputOptions="DateTime">
       <filter type="System.Diagnostics.EventTypeFilter"
                     initializeData="Information"></filter>
    </add>

    desde un metodo de mi aplicación en c# necesito dicha ruta

    la linea seria algo asi:

    string logFilePath = ConfigurationManager.sharedListeners["initializeData"].ToString();

    o como se haria esto?

    martes, 13 de noviembre de 2018 21:53

Respuestas

  • Hola puedes hacer lo siguiente

    string path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
    
    XDocument config = XDocument.Load(path);
    XElement diagnostics = config.Descendants().FirstOrDefault(e => e.Name == "system.diagnostics");
    
    if (diagnostics == default(XElement))
    {
        // No se ha encontrado <system.diagnostics>
    }
    else
    {
        // aquí modificarías los nodos que quieras
    }
    
    config.Save(path);
    
    Trace.Refresh();  // recargar la configuración


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta greg_dorian miércoles, 14 de noviembre de 2018 14:26
    miércoles, 14 de noviembre de 2018 13:32
    Moderador

Todas las respuestas

  • Hola  greg_dorian

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que nos encontramos realizando la revisión del inconveniente que presentas.

    Te daremos una respuesta a la brevedad posible.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    martes, 13 de noviembre de 2018 23:14
    Moderador
  • Hola, y qué problema hay en cambiarlo a mano en el archivo app. Config y volver a ejecutar la aplicación?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 13 de noviembre de 2018 23:28
    Moderador
  • hola

    para usar el ConfigurationManager deberias definir si ese <add> esta dento de alguna seccion de configuracion que puedas tomar



    analiza el articulo y veras que el configSections es importante

    ConfigurationSection diagnosticsSection = (ConfigurationSection)ConfigurationManager.GetSection("system.diagnostics");
    ConfigurationElementCollection listeners = diagnosticsSection.ElementInformation.Properties["sharedListeners"].Value as ConfigurationElementCollection; 
    
    foreach (ConfigurationElement listener in listeners)
    {
        string initializeData= listener.ElementInformation.Properties["initializeData"].Value.ToString();
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 14 de noviembre de 2018 0:12
  • hola @Sergio Parra la idea es tomar la ruta donde esta escribiendo el svclog, y cambiar este (LogFile.log) via programa, no hacerlo manualmente
    • Editado greg_dorian miércoles, 14 de noviembre de 2018 13:24
    miércoles, 14 de noviembre de 2018 13:23
  • Hola puedes hacer lo siguiente

    string path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
    
    XDocument config = XDocument.Load(path);
    XElement diagnostics = config.Descendants().FirstOrDefault(e => e.Name == "system.diagnostics");
    
    if (diagnostics == default(XElement))
    {
        // No se ha encontrado <system.diagnostics>
    }
    else
    {
        // aquí modificarías los nodos que quieras
    }
    
    config.Save(path);
    
    Trace.Refresh();  // recargar la configuración


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta greg_dorian miércoles, 14 de noviembre de 2018 14:26
    miércoles, 14 de noviembre de 2018 13:32
    Moderador