参考: https://stackoverflow.com/questions/19518843/logback-configuration-via-jvm-argument
logback相关配置,其中${LOG_HOME}表示为环境变量,在java启动应用程序时,通过java -DLOG_HOME="路径"来指定的,可以动态去设置它的地址。
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <property name="logPath" value="${LOG_HOME-/home}/logs" /> <!-- 日志打印的格式 --> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> %d - %msg%n </pattern> </layout> </appender> <!-- info 状态下的日志 --> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %10logger [%thread] : %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logPath}/info.%d.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> </appender> <!-- 错误级别的日志文件 --> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %10logger [%thread] : %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logPath}/error.%d.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="consoleLog" /> <appender-ref ref="fileInfoLog" /> <appender-ref ref="fileErrorLog" /> </root> </configuration>
上面代码中 ${LOG_HOME-/home}/logs
表示,如果没有传入环境变量LOG_HOME,然后就使用后面的/home路径,对于windows系统来说,/home表示当前jar包所在的盘符。
java -Dlogback_home="c://logs" -jar eureka.jar
这样就把日志文件存储到了C盘logs目录了。
docker run -d -p 7070:7070 -m 200M -e JAVA_OPTIONS='-Dlogback_home="/deployments/' eurekaserver