J'essaye d'envoyer les logs de mon application spring boot à ovh LDP graylog sur un stream avec un token d'écriture, j'utilise :
implementation('net.logstash.logback:logstash-logback-encoder:8.0')
Mon logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds" debug="true"> <springProfile name="local"> <appender name="JSON_FILE" class="ch.qos.logback.core.FileAppender"> <file>logs/test-log.json</file> <append>true</append> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <fieldNames> <message>short_message</message> <level>Niveau</level> <timestamp>-</timestamp> <mdc>mdc</mdc> </fieldNames> <provider class="ovh.sas.server.logs.LevelToIntegerJsonConverter"/> <provider class="ovh.sas.server.logs.UnixTimestampProvider"/> <customFields>{"host":"myLocalhost", "_X-OVH-TOKEN":"myToken"}</customFields> </encoder> </appender> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_CONSOLE} - %msg%n%rEx{full,${LOG_STACK}}</pattern> </encoder> </appender><appender name="GELF" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>gra159.logs.ovh.com:12202</destination> <ssl>false</ssl> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <fieldNames> <message>short_message</message> <level>Niveau</level> <timestamp>-</timestamp> <mdc>mdc</mdc> </fieldNames> <provider class="ovh.sas.server.logs.LevelToIntegerJsonConverter"/> <provider class="ovh.sas.server.logs.UnixTimestampProvider"/> <customFields>{"host":"myLocalhost", "_X-OVH-TOKEN":"myToken", "_X-OVH-INPUT":"gelf"}</customFields> </encoder> <reconnectionDelay>10000</reconnectionDelay> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="GELF"/> <appender-ref ref="JSON_FILE"/> </root> <logger name="net.logstash.logback" level="debug"> <appender-ref ref="GELF"/> </logger> </springProfile> <springProfile name="dev">...</springProfile> <springProfile name="cloud">...</springProfile> <springProfile name="prod">...</springProfile>
</configuration>
J'ai rajouté le JSON_FILE juste pour vérifier le message générer :
{"-":"2025-03-10T14:28:21.519770619+01:00","@version":"1","short_message":"Retrieving access in batch","logger_name":"sas.server.quartz.device.DeviceAccessMoxaStatusJob","thread_name":"sas-access_Worker-1","Niveau":"INFO","level_value":20000,"mdc":{"USER":"Batch","REQUEST_ID":"2ad999c1-a589-4082-bgd9-64cb1bf87e95"},"level":1,"timestamp":1.74161330152E9,"host":"myLocalhost","_X-OVH-TOKEN":"myToken"}
Quand l'appli démarre j'ai bien la connexion dans les logs :
|-INFO in net.logstash.logback.appender.LogstashTcpSocketAppender[GELF] - Log destination gra159.logs.ovh.com/<unresolved>:12202: connection established.
Mais rien sur Graylog, et quand j'essaye d'envoyer le message générer par l'encoder en java :
public static void main(String[] args) { new SpringApplicationBuilder().bannerMode(Mode.LOG).sources(Server.class).run();String message = "{\"-\":\"2025-03-10T14:28:21.519770619+01:00\",\"@version\":\"1\",\"short_message\":\"Test message from java\",\"logger_name\":\"sas.server.quartz.device.DeviceAccessMoxaStatusJob\",\"thread_name\":\"sas-access_Worker-1\",\"Niveau\":\"INFO\",\"level_value\":20000,\"mdc\":{\"USER\":\"Batch\",\"REQUEST_ID\":\"2ad999c1-a589-4082-bgd9-64cb1bfa9e95\"},\"level\":1,\"timestamp\":1.74161330152E9,\"host\":\"myLocalhost\",\"_X-OVH-TOKEN\":\"myToken\"}\n"; SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); try (Socket socket = factory.createSocket("gra159.logs.ovh.com", 12202); OutputStream outputStream = socket.getOutputStream()) { outputStream.write(message.getBytes()); outputStream.flush(); System.out.println("✅ Log envoyé manuellement !"); } catch (UnknownHostException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); }
}
Je reçois bien le message sur mon stream Graylog.
Avec le terminal aussi ça fonctionne bien :
echo -e '{"-":"2025-03-10T14:28:21.519770619+01:00","@version":"1","short_message":"Retrieving access moxa statuses in batch","logger_name":"sas.server.quartz.device.DeviceAccessMoxaStatusJob","thread_name":"sas-access_Worker-1","Niveau":"INFO","level_value":20000,"mdc":{"USER":"Batch","REQUEST_ID":"2ad999c1-a589-4082-aad9-64cb1bfa9e95"},"level":1,"timestamp":1.74161330152E9,"host":"myLocalhost","_X-OVH-TOKEN":"myToken"}' | openssl s_client -quiet -no_ign_eof -connect gra159.logs.ovh.com:12202
Des idées pour savoir ou est le problème ?
Merci.