簡體   English   中英

如何關閉 wildfly 服務器日志並啟用 log4j2

[英]How to turn off wildfly server logs and enable log4j2

我使用 jakarta 和 wildfly 服務器制作了一個 web 應用程序。 我的問題是我在某些情況下放置了記錄器,當我調用這些方法時我無法在文件中看到它們。 例如我有這個方法:

@Override
    public PropertyOwnerDto updateEmail(int id, String email) {
        try {
            PropertyOwner propertyOwner = propertyOwnerRepository.read(id);
            propertyOwner.setEmail(email);
            propertyOwnerRepository.create(propertyOwner);
            logger.info("Changing e-mail of owner with id: " + id + "to :" + email);
            return new PropertyOwnerDto(propertyOwner);
        } catch (Exception e) {
            logger.error("Not found");
        }
        return null;
    }

您可以在其中看到我有 2 個記錄器。 當我撥打 postman 更改 email 時,email 將更改但我看不到日志通知我。 我有正確的進口:

導入 org.apache.logging.log4j.LogManager; 導入 org.apache.logging.log4j.Logger;

和正確的依賴關系:

  <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.13.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.3</version>
        </dependency>

我還制作了一個 log4j2.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <File name="MyFile" fileName="logs/mylogfile.log">
      <PatternLayout pattern="%d %p %C{1.} [%t] %m%n"/>
    </File>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="MyFile"/>
    </Root>
  </Loggers>
</Configuration>

我還制作了一個 jboss-logging.properties 來關閉來自 wildfly 服務器的日志:

# Root logger option logger.level=OFF

我在“mylogfile.log”中看到的唯一日志是當我構建項目時,我有一些方法可以從 csv 文件中讀取一些屬性。 這些日志在我的文件中可見:

2023-01-25 14:43:14,605 INFO c.m.w.s.i.IoServiceImpl [main] The csv file property.csv has been read 
2023-01-25 14:43:14,610 INFO c.m.w.s.i.IoServiceImpl [main] The csv file owners.csv has been read 
2023-01-25 14:43:14,611 INFO c.m.w.s.i.IoServiceImpl [main] The csv file repairs.csv has been read

其中的一種方法是:

 @Override
    public List<String[]> readCsvFile(String fileName) {
        List<String[]> list = new ArrayList<>();
        BufferedReader br;
        try {
            br = new BufferedReader(new FileReader(fileName));
            String str;
            while ((str = br.readLine()) != null) {
                list.add(str.split(","));
            }
            logger.info("The csv file {} has been read ", fileName);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return null;
        }
        return list;
    }

我的問題是如何保存此文件中的所有日志? 例如,如果我在應用程序運行時發出 http 請求以按照上述方法更新 email,我如何在文件中保存具有 INFO 或 ERROR 級別的日志?

我還在 META-INF 中創建了一個名為 jboss-deployment-structure.xml 的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.commons.logging" />
            <module name="org.apache.log4j" />
            <module name="org.jboss.logging" />
            <module name="org.jboss.logging.jul-to-slf4j-stub" />
            <module name="org.jboss.logmanager" />
            <module name="org.jboss.logmanager.log4j" />
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

我試圖禁用 wildflyserver 我說的是 jboss-logging.properties 並且我添加了 jboss-deployment-structure.xml 不起作用`

您還需要排除org.apache.logging.log4j.api或者只是排除logging子系統。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclude-subsystem>
            <subsystem name="logging"/>
        </exclude-subsystem>
    </deployment>
</jboss-deployment-structure>

這將跳過所有日志記錄依賴項,使其不會添加到您的部署中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM