Spring Boot: Làm cách nào tôi có thể đặt mức ghi nhật ký với application.properations?


301

Đây là câu hỏi rất đơn giản, nhưng tôi không thể tìm thấy thông tin.
(Có thể kiến ​​thức của tôi về các khung công tác Java còn thiếu trầm trọng)

Làm cách nào tôi có thể đặt mức ghi nhật ký với application.properies?
Và đăng nhập vị trí tập tin, vv?


1
Đối với bản ghi, một tùy chọn khác là đặt mức nhật ký làm biến môi trường, ví dụ thông qua bảng điều khiển heroku. Trong Settings-> Config Varsđược đặt thành logging.level.com.yourpackagemức mong muốn (INFO, ERROR, DEBUG).
LukeSolar

Câu trả lời:


355

Cập nhật: Bắt đầu với Spring Boot v1.2.0.RELEASE, cài đặt trong application.propertieshoặc application.ymláp dụng. Xem phần Nhật ký cấp độ của hướng dẫn tham khảo.

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

Đối với các phiên bản trước của Spring Boot, bạn không thể. Bạn chỉ cần sử dụng cấu hình bình thường cho khung đăng nhập của bạn (log4j, logback) cho điều đó. Thêm tệp cấu hình thích hợp ( log4j.xmlhoặc logback.xml) vào src/main/resourcesthư mục và định cấu hình theo ý thích của bạn.

Bạn có thể kích hoạt ghi nhật ký gỡ lỗi bằng cách chỉ định --debugkhi khởi động ứng dụng từ dòng lệnh.

Mùa xuân Boot cũng cung cấp một đẹp điểm khởi đầu cho logback để cấu hình một số giá trị mặc định, màu vv các base.xml tập tin mà bạn chỉ có thể bao gồm trong tập tin logback.xml của bạn. (Điều này cũng được khuyến nghị từ logback.xml mặc định trong Spring Boot.

<include resource="org/springframework/boot/logging/logback/base.xml"/>     

8
Thông thường bất cứ điều gì bạn có thể làm trên dòng lệnh đều hoạt động trong một tệp cấu hình bên ngoài. Vì vậy, debug = true sẽ làm điều đó tôi nghĩ. Lá cờ đó hơi đặc biệt một chút vì việc đăng nhập phải được khởi tạo từ rất sớm, nhưng tôi nghĩ rằng nó sẽ hoạt động.
Dave Syer

7
BTW hệ thống ghi nhật ký ưa thích là logback và đó là những gì bạn nhận được theo mặc định từ các poms khởi động. Vì vậy, logback.xml là công cụ phổ biến nhất để định cấu hình ghi nhật ký theo cách chi tiết. Cờ --debug chỉ chuyển trên một số kênh ghi nhật ký Spring đã chọn.
Dave Syer

Một mẹo khác, khởi động mùa xuân bao gồm một tệp cơ sở đẹp . Đó là một điểm khởi đầu tốt đẹp. (Xem câu trả lời mở rộng của tôi).
M. Deinum

@ M.Deinum Cảm ơn bạn một lần nữa cho mẹo tuyệt vời của bạn! Bây giờ tôi có thể thay đổi cấp độ nhật ký cho mã của riêng tôi.
zeodtr

2
Dường như chúng ta có thể, bây giờ. Đối với Spring v4.1.3.RELEASE (với Spring Boot v1.2.0.RELEASE), các cài đặt trong application.propertieshoặc application.ymláp dụng, như được trả lời bởi Richard (modulo the :hoặc =vấn đề --- dấu hai chấm dường như hoạt động với tôi).
Eric Platon

108

Bạn có thể làm điều đó bằng cách sử dụng application.properations của bạn.

logging.level.=ERROR-> Đặt mức ghi nhật ký gốc thành lỗi
...
logging.level.=DEBUG-> Đặt mức ghi nhật ký gốc thành DEBUG

logging.file=${java.io.tmpdir}/myapp.log-> Đặt đường dẫn tệp nhật ký tuyệt đối thành TMPDIR / myapp.log

Một bộ ứng dụng mặc định lành mạnh về việc ghi nhật ký bằng cách sử dụng hồ sơ sẽ là: ứng dụng. sản phẩm:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

application-dev.properies:

logging.level.=DEBUG
logging.file=

Khi bạn phát triển bên trong IDE yêu thích của mình, bạn chỉ cần thêm một -Dspring.profiles.active=devđối số VM vào cấu hình chạy / gỡ lỗi của ứng dụng.

Điều này sẽ cung cấp cho bạn lỗi chỉ đăng nhập vào sản xuất và ghi nhật ký gỡ lỗi trong quá trình phát triển MÀ KHÔNG ghi đầu ra vào tệp nhật ký. Điều này sẽ cải thiện hiệu suất trong quá trình phát triển (và tiết kiệm ổ SSD trong vài giờ hoạt động;)).


1
Dấu '=' cho bài tập không hoạt động. Việc chuyển nhượng được thực hiện với dấu ':' là dấu phân cách. logging.level.:DEBUG
randominstanceOfLivingT Breath

2
Thật kỳ lạ, tôi có thiết lập này làm việc trong một dự án ví dụ. Các dấu '' (dấu cách), '=' và ':' được coi như dấu phân cách trừ trường hợp sử dụng dấu phân cách trong khóa. Bạn có chắc khóa của bạn không chứa bất kỳ khoảng trắng nào không?
Richard

1
Có thể xác nhận rằng ":" hoạt động nhưng "=" bị bỏ qua, Chỉnh sửa: Đã nói sớm, có một khoảng cách giữa "=" và cấp độ. mọi thứ đều hoạt động
Mike R

1
Điều này không hoạt động trong thử nghiệm của tôi với spring-boot 1.4.0: logging.level.=DEBUGsẽ khiến ứng dụng không khởi động được và bị lỗi:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang

2
Dường như với tôi logging.level.chỉ là một phím tắt cú pháp tiện lợi logging.level.root, có thể được ưa thích vì (1) ít bị nhầm lẫn với một lỗi đánh máy, (2) có khả năng rõ ràng hơn và (3) làm việc với =dấu hiệu gán, cung cấp tính nhất quán tổng thể cao hơn vào tập tin cấu hình.
Alain BECKER

66

Cách thích hợp để đặt mức ghi nhật ký gốc là sử dụng thuộc tính logging.level.root. Xem tài liệu , đã được cập nhật vì câu hỏi này ban đầu được hỏi.

Thí dụ:

logging.level.root=WARN

15

Giả sử ứng dụng của bạn có tên gói là com.company.myproject. Sau đó, bạn có thể đặt mức ghi nhật ký cho các lớp bên trong dự án của bạn như được đưa ra dưới đây trong các tệp application.properIES

log.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUGlogging.level.org.hibernate = DEBUGsẽ đặt mức ghi nhật ký cho các lớp của Spring framework web và Hibernate.

Để thiết lập vị trí tệp nhật ký sử dụng

log.file = /home/ubfox/myproject.log


14

Nếu bạn đang sử dụng Spring Boot thì bạn có thể trực tiếp thêm các thuộc tính sau vào tệp application.properIES để đặt mức ghi nhật ký, tùy chỉnh mẫu ghi nhật ký và lưu trữ nhật ký trong tệp bên ngoài.

Đây là các cấp ghi nhật ký khác nhau và thứ tự của nó từ tối thiểu << tối đa.

TẮT << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL

# 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, its 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"

Vui lòng thông qua liên kết này để tùy chỉnh nhật ký của bạn sinh động hơn.

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


Tôi không biết tại sao nhưng log.level.tech.hardik = theo dõi điều này không hoạt động trong trường hợp của tôi khi tôi đặt log.level.roo = theo dõi nó hoạt động
Arvind Kumar

10

Đảm bảo mẹo Dave Syer nhận được một số tình yêu, bởi vì thêm debug=truevào application.properations thực sự sẽ cho phép ghi nhật ký gỡ lỗi.


8

Trong trường hợp bạn muốn sử dụng một khung ghi nhật ký khác, ví dụ log4j, tôi thấy cách tiếp cận đơn giản nhất là vô hiệu hóa ghi nhật ký của đôi giày lò xo và thực hiện việc ghi nhật ký của riêng bạn. Bằng cách đó, tôi có thể định cấu hình mọi loglevel trong một tệp, đó là log4j.xml (trong trường hợp của tôi).

Để đạt được điều này, bạn chỉ cần thêm các dòng đó vào tệp pom.xml của mình:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

Bạn có thể đã có sự phụ thuộc đầu tiên và chỉ cần hai người kia. Xin lưu ý rằng ví dụ này chỉ bao gồm log4j.
Đó là tất cả, bây giờ bạn đã sẵn sàng cấu hình đăng nhập để khởi động trong tệp cấu hình log4j của bạn!


Loại trừ này làm việc cho tôi. Api REST của tôi không được chọn phụ thuộc log4j của tôi và log4j.properties.
ankitjaininfo

bây giờ họ cũng có spring-boot-starter-log4j2
Kalpesh Soni

4

Bạn có thể thử đặt mức ghi nhật ký thành DEBUG, nó sẽ hiển thị mọi thứ trong khi khởi động ứng dụng

logging.level.root=DEBUG

3

Đối với các bản ghi: tài liệu chính thức , như đối với Spring Boot v1.2.0.RELEASE và Spring v4.1.3.RELEASE:

Nếu thay đổi duy nhất bạn cần thực hiện để ghi nhật ký là đặt mức độ của các trình ghi nhật ký khác nhau thì bạn có thể thực hiện điều đó trong application.properations bằng cách sử dụng tiền tố "log.level", vd

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

Bạn cũng có thể đặt vị trí của tệp để đăng nhập (ngoài bảng điều khiển) bằng cách sử dụng "log.file".

Để định cấu hình các cài đặt chi tiết hơn của hệ thống ghi nhật ký, bạn cần sử dụng định dạng cấu hình gốc được LoggingSystem hỗ trợ trong câu hỏi. Theo mặc định, Spring Boot chọn cấu hình gốc từ vị trí mặc định của nó cho hệ thống (ví dụ classpath: logback.xml cho Logback), nhưng bạn có thể đặt vị trí của tệp cấu hình bằng thuộc tính "log.config".


2

Nếu bạn muốn đặt chi tiết hơn, vui lòng thêm tên tệp cấu hình nhật ký "logback.xml" hoặc "logback-spring.xml".

trong tệp application.properIES của bạn, nhập như thế này:

logging.config: classpath:logback-spring.xml

trong loback-spring.xml, nhập như thế này:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

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

    </configuration>

2

Câu trả lời hiện tại là vĩ đại. Tôi chỉ muốn chia sẻ với bạn một tính năng khởi động mùa xuân mới cho phép nhóm nhật ký và đặt mức ghi nhật ký trên toàn nhóm.

Ví dụ từ các tài liệu:

  • Tạo một nhóm đăng nhập
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • Đặt mức ghi nhật ký cho nhóm
logging.level.tomcat=TRACE

Đó là tính năng tốt mang lại sự linh hoạt hơn.


2

Trong cấu hình hiện tại của tôi, tôi đã xác định nó trong application.yaml như thế:

logging:
  level:
    ROOT: TRACE

Tôi đang sử dụng spring-boot: 2.2.0.RELEASE. Bạn có thể xác định bất kỳ gói nào có mức TRACE như thế.


1
Điều này thiết lập ở cấp ứng dụng. OP chỉ muốn theo dõi các bản ghi ngủ đông mà bạn sẽ yêu cầu bộ lọc cấp gói trong cài đặt nhật ký
Sudip Bhandari

2

trong dự án khởi động mùa xuân, chúng ta có thể viết log.level.root = WARN nhưng vấn đề là ở đây, chúng ta phải khởi động lại ngay cả khi chúng ta thêm phụ thuộc devtools, trong tệp thuộc tính nếu chúng ta sửa đổi bất kỳ giá trị nào sẽ không tự động phát hiện được, vì giới hạn này tôi đã biết giải pháp i, e chúng ta có thể thêm bộ truyền động trong pom.xml và vượt qua mức logger như bên dưới được hiển thị trong ứng dụng khách postman trong thanh url http: // localhost: 8080 / loggers / ROOT hoặc http: // localhost: 8080 / loggers / com .mycompany và trong cơ thể, bạn có thể chuyển định dạng json như bên dưới

{
  "configuredLevel": "WARN"
}

1

Trong trường hợp IDE nhật thực và dự án của bạn là maven, hãy nhớ dọn dẹp và xây dựng dự án để phản ánh các thay đổi.


1

Với Springboot 2, bạn có thể đặt Cấp ghi nhật ký gốc với Biến môi trường như sau:

logging.level.root=DEBUG

Hoặc bạn có thể đặt ghi nhật ký cụ thể cho các gói như thế này:

logging.level.my.package.name=TRACE

đối với cấu hình biến môi trường, bạn muốn sử dụng : LOGGING_LEVEL_ROOT=DEBUG, sử dụng cú pháp trường hợp lạc đà
Anthony Dahanne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.