Как установить уровень Log4j2 из командной строки - PullRequest
0 голосов
/ 27 мая 2020

Я создаю приложение Spring Boot Web Service и использую Log4j2.

Я хочу установить уровень журнала, передав что-то вроде: --log4j2.level=DEBUG - Как я могу это сделать?

Я не нашел для этого никакой документации.

Я знаю, что могу установить файл конфигурации log4j с помощью --logging.config=/path/to/file, но это не то, что мне нужно.

Мой пом. xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>...</name>
    <description>...</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.25</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Мой основной класс выглядит так:

@SpringBootApplication
@Log4j2
public class MyApplication {
    public static void main(String[] args) {
        log.debug("Test something");
        SpringApplication.run(HlsManipulatorApplication.class, args);
    }
}

Спасибо за помощь!

1 Ответ

0 голосов
/ 28 мая 2020

Приложения Spring Boot инициализируют логирование минимум 3 раза. Первый - в SpringApplication, когда он создает регистратор, что происходит буквально в первую очередь. Если вы используете Log4j 2, это заставит его использовать свой обычный механизм для поиска файла log4j2. xml, log4j2.properties или log4j2.yml. Spring boot предоставляет конфигурацию по умолчанию, но, как вы знаете, вы можете изменить ее. Если вы это сделаете, вы можете указать регистратор root как

<Root level="${sys:root_log_level:-INFO}">
...
</Root>

Это позволит вам использовать -Droot_log_level=DEBUG в командной строке. Если системное свойство не настроено, по умолчанию будет использоваться значение INFO.

Обратите внимание, что вы также можете указать альтернативное расположение для конфигурации ведения журнала: a) указав расположение файла в bootstrap .yml как * 1007. *

logging:
  config: log4j2-myapp.xml

, а затем б) в файле с именем log4j2.application.properties как

log4j.configurationFile=log4j-mmyapp.xml

. Это приведет к тому, что при каждой перенастройке Log4j будет использоваться одна и та же конфигурация, включая начальную конфигурацию. Вы можете увидеть пример этого в Log4j пример приложения Spring Boot , где он извлекает конфигурацию ведения журнала из Spring Cloud Config.

Конечно, вы можете использовать механизм Spring для установки уровня ведения журнала, но это не повлияет на настройку журналирования в первый раз, поскольку Spring на тот момент ничего не сделал.

Я также должен указать, что Log4j поставляется с SpringLookup , который можно использовать в Spring приложения для ссылки на переменные конфигурации Spring в конфигурации log4j. Конечно, переменные не будут иметь значения при первой настройке журналирования, поскольку среда Spring не будет создана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...