es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Firebase Admin SDK es un conjunto de bibliotecas cliente que permiten interactuar con los servicios de Firebase desde un servidor. Google HTTP Client Request and Response logging es un registro de solicitudes y respuestas HTTP en el cliente de Google.

El SDK de administración de Firebase utiliza el registro a través de slf4j y mi proyecto ha sido configurado con Log4j2. Normalmente, realizo las integraciones a través de clientes personalizados envueltos alrededor de RestTemplate con lógica de registro específica para registrar las solicitudes y respuestas HTTP en un formato estandarizado específico (definido a través de xml).

El problema es que ahora me he encontrado con una integración donde podría utilizar un SDK, pero el problema es que mi registro no es muy compatible fácilmente con el cliente HTTP de Google. He revisado varios sitios en busca de buenas prácticas, pero desafortunadamente no he encontrado nada tangible.

¿Cómo configurar el apéndice del archivo Log4j2 para que el cliente HTTP de Google registre las solicitudes y respuestas en un formato estandarizado? Agradecido por las buenas prácticas y orientación hacia nuevos conocimientos.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para configurar un archivo appender Log4j2 para Google HTTP Client y generar registros de solicitudes y respuestas en un formato estandarizado, puedes seguir estos pasos:

    1. Primero, necesitas agregar la dependencia para Google HTTP client en tu proyecto. Puedes hacer esto agregando el siguiente código en tu archivo build.gradle:
    implementation 'com.google.http-client:google-http-client:1.36.0'
    
    1. Una vez que hayas agregado la dependencia, debes crear un objeto HttpTransport personalizado y configurar las propiedades de registro en él. Puedes utilizar el siguiente código para hacer esto:
    import com.google.api.client.http.*;
    import org.apache.logging.log4j.*;
    import org.apache.logging.log4j.core.*;
    import org.apache.logging.log4j.core.appender.*;
    import org.apache.logging.log4j.core.config.*;
    import org.apache.logging.log4j.core.config.builder.api.*;
    import org.apache.logging.log4j.core.layout.*;
    import org.slf4j.*;
    
    import java.io.*;
    
    public class CustomHttpTransport extends ApacheHttpTransport {
        private final Logger logger = LoggerFactory.getLogger(CustomHttpTransport.class);
    
        @Override
        protected void configureTransport(HttpTransport.Builder builder) {
            Log4jContextSelector selector = LogManager.getContext().getSelector();
            Configuration config = selector.getContext(LogManager.getContext(false)).getConfiguration();
            Layout<string> layout = PatternLayout.newBuilder().withPattern("[%d{ISO8601}] [%t] %p %c{1}: %m%n").build();
            Appender appender = FileAppender.newBuilder()
                    .withFileName("/ruta/al/archivo/log.log")
                    .withLayout(layout)
                    .withName("customAppender")
                    .withIgnoreExceptions(false)
                    .withImmediateFlush(true)
                    .build();
            config.addAppender(appender);
            AppenderRef ref = AppenderRef.createAppenderRef("customAppender", null, null);
            LoggerConfig loggerConfig = LoggerConfig.createLogger(false, Level.DEBUG, "com.google.api.client.http", "true", new AppenderRef[]{ref}, null, config, null);
            loggerConfig.addAppender(appender, null, null);
            config.addLogger("com.google.api.client.http", loggerConfig);
            selector.getContext(LogManager.getContext(false), null, null, false).updateLoggers();
            builder.setLogger(logger::debug);
        }
    }
    
    1. A continuación, puedes utilizar este objeto HttpTransport personalizado en tus solicitudes para registrar los datos de solicitud y respuesta en el formato configurado. Por ejemplo:
    import com.google.api.client.http.*;
    import org.apache.logging.log4j.*;
    import org.apache.logging.log4j.core.*;
    import org.apache.logging.log4j.core.appender.*;
    import org.apache.logging.log4j.core.config.*;
    import org.apache.logging.log4j.core.config.builder.api.*;
    import org.apache.logging.log4j.core.layout.*;
    import org.slf4j.*;
    
    import java.io.*;
    
    public class Ejemplo {
        public static void main(String[] args) throws IOException {
            HttpTransport httpTransport = new CustomHttpTransport();
            HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
            HttpRequest httpRequest = requestFactory.buildGetRequest(new GenericUrl("https://example.com"));
            HttpResponse httpResponse = httpRequest.execute();
            httpResponse.ignore();
        }
    }
    

    Esto registrará los datos de solicitud y respuesta en el formato configurado en el archivo de registro especificado. Puedes personalizar aún más el formato de registro modificando el objeto PatternLayout en el método configureTransport.

Comments are closed.