pattern mkyong logger log example spring spring-boot logback slf4j

mkyong - Spring Boot: no se ha escrito ningún archivo de registro(logging.file no se respeta)



spring boot logging mkyong (8)

Utilizo Spring Boot y quiero que escriba la salida del registro en un archivo.

Según los documentos, esto se hace simplemente estableciendo

logging.file=filename.log

Mientras que la salida de la consola funciona bien, filename.log no se crea. Además, si creo el archivo manualmente, no se escribe nada en él. ¿Qué extraño?


Acabo de usar el mecanismo de registro provisto por Spring-boot. Escribí a continuación en mi archivo ''logback.xml'':

<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <include resource="org/springframework/boot/logging/logback/file- appender.xml" /> <root level="INFO"> <appender-ref ref="FILE" /> </root> </configuration>

Puse los archivos application.properties y logback.xml bajo el mismo paquete ''src / main / resources''. En el archivo application.properties acaba de agregar un parámetro:

logging.file = xyz.log

Funcionó perfectamente bien para mí.


Aquí es cómo me las arreglé para escribir la salida en un archivo local. Para deshabilitar el registro de la consola y escribir la salida solo en un archivo, necesita un logback-spring.xml personalizado ( llámelo logback-spring.xml para poder aprovechar las funciones de plantillas (formato de fecha, etc.) que proporciona Boot) que importa file-appender.xml en lugar de console-appender.xml. Para lograr esto, debe pegar este código a continuación en su archivo logback-spring.xml.

<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/> <include resource="org/springframework/boot/logging/logback/file-appender.xml" /> <root level="INFO"> <appender-ref ref="FILE" /> </root> </configuration>

También debe agregar lo siguiente a su application.properties:

logging.file=myapplication.log

Tenga en cuenta que este archivo de registro myapplication.log será generado por springboot.

Así es como se ve mi árbol de estructura de aplicaciones:

Si desea divertirse más, puede ubicar el archivo base.xml en sus dependencias de Maven de la siguiente manera:


En mi caso, agregué por error un archivo "logback.xml" en uno de mis submódulos que causó este problema, elimínelo y todo estará bien.


Encontré una solución. No estoy muy contento con esto ya que todavía no responde a mi pregunta original por qué no se respeta la propiedad logging.file .

logback-spring.xml el logback-spring.xml partir de la answer de Georges en el mismo directorio donde reside application.properties . De acuerdo a la documentation Spring Boot lo recogerá desde allí. Al parecer, esto no sucede en mi caso.

Necesito agregar adicionalmente logging.config=classpath:logback-spring.xml para que Spring lo logging.config=classpath:logback-spring.xml . Las partes relevantes de mi application.properties son ahora

logging.config=classpath:logback-spring.xml logging.file=logs/logfile.log

( logs directorio de logs manualmente).


No sé si esto te ayudaría, pero también estoy usando Logback en mi proyecto Spring-Boot y la estructura es la siguiente.

Archivo: logback.xml

<?xml version="1.0" encoding="UTF-8"?> <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="logback.xsd"> <property resource="/application.properties"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${app.logPathPrefix}/myproject.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${app.logPathPrefix}/myproject.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n </pattern> </encoder> </appender> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n </pattern> </encoder> </appender> <logger name="org.springframework" level="INFO" /> <logger name="com.mycompany" level="INFO" /> <logger name="org.hibernate" level="DEBUG" /> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>

Archivo: application.properties

app.logPathPrefix=/var/log/myproject


Si está en Spring Boot, entonces puede agregar directamente las siguientes propiedades en el archivo application.properties para establecer el nivel de registro, personalizar el patrón de registro y almacenar registros en el archivo externo.

Estos son diferentes niveles de registro y su orden desde el mínimo << máximo.

OFF << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << TODOS

# To set logs level as per your need. logging.level.org.springframework = debug logging.level.tech.hardik = trace # To store logs to external file # Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, your logs it won''t work. logging.file=D:/spring_app_log_file.log # To customize logging pattern. logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

Pase por este enlace para personalizar sus registros de manera más vívida.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html


Si está utilizando Maven agregue la dependencia:

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency>

Ahora tiene que especificar un archivo que se llama ''log4j.properties'' que debe colocar en el directorio específico: ''src / main / resources / log4j.properties''

Aquí es cómo el archivo debe mirar por ejemplo:

# Root logger option log4j.rootLogger=INFO, file, stdout log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE # Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # log4j.appender.springlog.Threshold=INFO log4j.appender.springlog.layout=org.apache.log4j.PatternLayout log4j.appender.springlog.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n # Direct log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=D:/example/filename.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Ahora importa estos:

import org.slf4j.Logger; import org.slf4j.LoggerFactory;

Declara una variable logger como esta:

final static Logger logger = Logger.getLogger(TheClassYourIn.class);

Y utilízalo en la clase así:

logger.info("Well hello world then ");

De esta manera funciona para mí. Espero que esta respuesta te ayude. Buena suerte !

PS: log4j.appender.file.File = ''directorio'' es la forma en que especifica dónde se almacenarán los registros. Si no especifica un directorio y simplemente lo deja como filename.log, este archivo se creará automáticamente en el directorio del proyecto.


Yo tuve el mismo problema. Es más que probable debido a los permisos de archivos en el sistema de archivos. Tenía la carpeta de la aplicación propiedad de root, pero ./logs era propiedad del propietario del proceso. Como tal, lo siguiente no funcionó:

logging.file = my.log

pero esto hizo

logging.file = / opt / myapp / logs / my.log