![](/img/trans.png)
[英]How to dynamically turn on or off one appender of rootLogger in 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.