2015-12-09 23 views
24

Nếu có thể đặt mức ghi nhật ký thông qua biến môi trường một mình trong ứng dụng Khởi động mùa xuân?Đặt mức độ đăng nhập trong khởi động mùa xuân qua biến môi trường

Tôi không muốn sử dụng application.properties khi tôi đang chạy trên Cloud Foundry và muốn nhận các thay đổi mà không cần triển khai (nhưng sau khi ứng dụng đã khởi động lại hoặc được khôi phục chính xác hơn).

Tôi đã thử đặt các vv env như LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=TRACE nhưng điều đó không có hiệu lực. Tuy nhiên, đặt logging.level.org.springframework: TRACE vào application.properties sẽ hoạt động.

Trả lời

25

Đây chỉ là một ý tưởng, nhưng bạn đã thử thiết

_JAVA_OPTIONS=-Dlogging.level.org.springframework=TRACE?

Về mặt lý thuyết, cách này -Dlogging.level.org.springframework=TRACE sẽ được chuyển làm đối số JVM mặc định và sẽ ảnh hưởng đến mọi cá thể JVM trong môi trường của bạn.

+2

Có thể xác nhận trong thực tế: Tôi đã kiểm tra [sample-logback] (https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample -logback) dự án (sử dụng phiên bản 1.3.0.RELEASE) và chạy 'mvn spring-boot: chạy -Dlogging.level.org.springframework = TRACE' tạo ra rất nhiều đầu ra bản ghi. Sử dụng tất cả các mũ '-DLOGGING_LEVEL_ORG_SPRINGFRAMEWORK = TRACE' hoặc các biến thể của chúng không làm gì cả. – vanOekel

+1

Nếu tham số '-D ...' hoạt động, thì việc đặt biến môi trường '_JAVA_OPTIONS' sẽ thực sự hoạt động! Lệnh 'mvn' chọn chúng giống như bất kỳ' java' nào. Lưu ý dấu gạch dưới trong đầu mặc dù, nó là cần thiết. Xem http://stackoverflow.com/questions/17781405/ để biết thêm thông tin. – Timekiller

+0

Tôi sẽ thử - thao tác này sẽ chạy qua Cloud Foundry Java Buildpack, nhưng hy vọng nó sẽ tôn trọng và truyền các giá trị trong '_JAVA_OPTIONS' –

2

tôi nào sẽ đề nghị bạn sử dụng các cấu mùa xuân:

  1. Tạo 2 thuộc tính tập tin:

    application-local.propertiesapplication-remote.properties

    (tên hồ sơ có thể khác nhau rõ ràng)

  2. Đặt mức ghi nhật ký trong mỗi tệp phù hợp (logging.level.org.springframework)

  3. Chạy ứng dụng của bạn với -Dspring.profiles.active=local tại địa phương và -Dspring.profiles.active=remote cho CF.

+0

Cảm ơn. Đáng buồn thay, điều này đòi hỏi phải biết những điều tôi muốn tăng độ trong của thời gian thiết kế, thay vì chạy thời gian. –

4

Có, bạn có thể kiểm soát mức ghi bằng biến môi trường. Đây là cách tôi đã triển khai cho ứng dụng Khởi động mùa xuân của mình, được triển khai trên nền tảng Cloud Foundry.

Trong tệp nhật ký, tệp cấu hình cung cấp trình giữ chỗ cho mức ghi nhật ký để đọc giá trị từ biến môi trường. Mặc định là INFO.

<logger name="com.mycompany.apps.cf" level="${APP_LOGGING_LEVEL:-INFO}"> 
     <appender-ref ref="CONSOLE"/> 
    </logger> 

Và sau đó, trong tệp kê khai triển khai CF cung cấp biến môi trường.

 
    applications: 
    - name: my-app-name 
     memory: 2048 
     env: 
     APP_LOGGING_LEVEL: DEBUG 

Tôi hy vọng điều này sẽ hữu ích.

+0

Nếu bạn đang chạy ứng dụng cục bộ, hãy sử dụng -DAPP_LOGGING_LEVEL = DEBUG – Sparkle8

+0

Tôi đã làm một việc tương tự như cách giải quyết, nhưng điều đó có nghĩa là phải biết bạn muốn kiểm soát nhật ký nào tại thời điểm thiết kế, điều này khá hạn chế. –

0

Dưới đây là một ví dụ sử dụng Logback với Janino có điều kiện gồm configs khai thác gỗ khác nhau thông qua properties or environmental variables ... Các cơ sở cấu hình, logback.xml đang sử dụng điều kiện cho sự phát triển giao diện điều khiển khai thác gỗ hoặc tập tin sản logging ... chỉ cần thả các tập tin sau đây trong /resources/


logback.xml


<?xml version="1.0" encoding="UTF-8"?> 
<configuration scan="true"> 
    <if condition='property("spring.profiles.active").contains("dev")'> 
     <then> 
      <include resource="org/springframework/boot/logging/logback/base.xml"/> 
      <include resource="dev.xml" optional="true"/> 
     </then> 
    </if> 
    <if condition='property("spring.profiles.active").contains("pro")'> 
     <then> 
      <include resource="org/springframework/boot/logging/logback/base.xml"/> 
      <include resource="pro.xml" optional="true"/> 
     </then> 
    </if> 
</configuration> 

dev.xml

<included> 
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <charset>utf-8</charset> 
      <Pattern>%-30([%p] [%c:%L]) » %m%n%rEx</Pattern> 
     </encoder> 
    </appender> 

    <!-- CHATTY LOGGERS HERE.--> 
    <logger name="org.springframework" level="DEBUG"/> 

    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> 
     <resetJUL>true</resetJUL> 
    </contextListener> 

    <root level="${logback.loglevel}"> 
     <appender-ref ref="CONSOLE"/> 
    </root> 

</included> 

pro.xml

0.123.
<included> 
    <conversionRule conversionWord="wex" 
        converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> 
    <property name="FILE_LOG_PATTERN" 
       value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/> 
    <property name="FILE_NAME_PATTERN" value="./logs/%d{yyyy-MM-dd}-exec.log"/> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>FILE_NAME_PATTERN</fileNamePattern> 
      <maxHistory>7</maxHistory> 
     </rollingPolicy> 
     <encoder> 
      <pattern>${FILE_LOG_PATTERN}</pattern> 
     </encoder> 
    </appender> 

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 
     <queueSize>512</queueSize> 
     <appender-ref ref="FILE"/> 
    </appender> 

    <!-- APP SPECIFIC LOGGERS HERE.--> 
    <logger name="org.springframework.boot.SpringApplication" level="INFO"/> 

    <root level="INFO"> 
     <appender-ref ref="FILE"/> 
    </root> 

</included> 
2

Mọi người có thể giải thích tại sao điều này không hoạt động?

$ xuất khẩu LOGGING_LEVEL_COM_ACME = ERROR

Đối với tất cả cấu hình khác sử dụng các biến môi trường như ghi đè dường như làm việc với không có vấn đề, ví dụ:

$ xuất khẩu EUREKA_CLIENT_ENABLED = false

Cảm ơn.

+4

Vì Spring Boot không sử dụng các biến môi trường để xác định mức ghi nhật ký. Nó có thể sử dụng các thuộc tính hệ thống JVM (được chỉ định bởi -Dlogging.level.blah = foo), nhưng nó dường như không hợp nhất trong các biến môi trường như các giá trị thuộc tính tiềm năng cho đến sau khi nó đã xử lý cấu hình đăng nhập. –

1

Cũng sử dụng Spring Boot (v1.2.3) trong Cloud Foundry, tôi đã phát hiện ra rằng người ta có thể điều chỉnh mức độ gốc khai thác gỗ sử dụng một biến môi trường như sau:

$ cf set-env <app name> LOGGING_LEVEL_ROOT DEBUG 

Thật không may, nó không xuất hiện để có thể quay số xuống mức ghi nhật ký cho các gói cụ thể (ít nhất là với phiên bản Java Buildpack và Spring Boot mà tôi đang sử dụng). Ví dụ thêm như sau, thêm vào ở trên không giảm mức độ log cho Spring framework:

$ cf set-env <app name> LOGGING_LEVEL_ORG_SPRINGFRAMEWORK INFO 

Nếu bạn đang sử dụng một cái gì đó giống như Splunk để thu thập các bản ghi của bạn, bạn có thể lọc ra tiếng ồn, tuy nhiên .

Một cách khác mà trông đầy hứa hẹn có thể dựa trên tùy biến lựa chọn lập luận việc xây dựng gói (xem here):

$ cf set-env <app name> '{arguments: "-logging.level.root=DEBUG -logging.level.org.springframework=INFO"}' 

Đáng buồn thay, tôi không thể có được điều này để thực sự làm việc. Tôi chắc chắn đồng ý rằng việc có thể cấu hình lại mức đăng nhập ở mức gói mà không thay đổi mã ứng dụng sẽ thuận tiện để làm việc.

3

Tôi cũng đã cố gắng đặt mức ghi nhật ký thông qua biến môi trường nhưng như đã đề cập, không thể sử dụng biến môi trường có tên viết hoa, ví dụ: LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=DEBUG. Tôi cũng không muốn thực hiện điều đó qua application.properties hoặc _JAVA_OPTIONS.

Sau khi đào sâu vào lớp org.springframework.boot.logging.LoggingApplicationListener Tôi đã kiểm tra xem khởi động mùa xuân có cố gắng đặt mức nhật ký DEBUG thành ORG_SPRINGFRAMEWORK gói không phải là tên gói thực. Vì vậy kết luận là bạn có thể sử dụng biến môi trường để thiết lập mức độ khai thác gỗ nhưng nó cần phải được theo hình thức: LOGGING_LEVEL_org.springframework=DEBUG hoặc logging.level.org.springframework=DEBUG

Tested khi khởi động mùa xuân 1,5.3

Các vấn đề liên quan