我写了一个小脚本来试试Log4J,但是总是报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at de.redstonepfalz.cachebuilder.CacheBuilder.<clinit>(CacheBuilder.java:7)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more
在 build.gradle 文件中,我输入了最新版本的 log4j-core 和 log4j-api,并且还安装了库。 IntelliJ 没有向我显示任何错误。 编译时也没有出现错误消息。
有人知道我做错了什么吗?
这是 Java 代码:
package de.redstonepfalz.cachebuilder;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
public class CacheBuilder {
private static final Logger logger = LogManager.getLogger(CacheBuilder.class);
public static void main(String[] args) {
logger.trace("Skript wird gestartet");
logger.error("Ein Fehler ist aufgetreten");
logger.fatal("Fatal");
logger.info("Ein Infofall ist aufgetreten");
logger.warn("Ein Warnung ist aufgetreten");
logger.debug("Debug messsage");
logger.trace("Skript wird beendet");
System.out.println("Hello world!");
}
}
build.gradle:https://pastebin.com/JftEB0QD
迷你项目
CacheBuilder
├── build.gradle
├── settings.gradle
└── src
└── main
├── java
│ └── de
│ └── redstonepfalz
│ └── cachebuilder
│ └── CacheBuilder.java
└── resources
└── log4j2.xml
CacheBuilder.java 和你的一样。
rootProject.name = 'CacheBuilder'
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'application'
}
repositories {
mavenCentral()
}
dependencies {
// This dependency is used by the application.
implementation 'com.google.guava:guava:31.1-jre'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.20.0'
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.20.0'
}
application {
// Define the main class for the application.
mainClass = 'de.redstonepfalz.cachebuilder.CacheBuilder'
}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" monitorInterval="5">
<properties>
<property name="LOG_DIR">logs</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" />
</Console>
<File name="file" fileName="${LOG_DIR}/demoapp.log">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="file" />
</Root>
</Loggers>
</Configuration>
运行命令:
gradle clean build
CacheBuilder
├── build
...
│ ├── distributions
│ │ ├── CacheBuilder.tar
│ │ └── CacheBuilder.zip
...
build/distributions
├── CacheBuilder
│ ├── bin
│ │ ├── CacheBuilder
│ │ └── CacheBuilder.bat
│ └── lib
│ ├── CacheBuilder.jar
│ ├── checker-qual-3.12.0.jar
│ ├── error_prone_annotations-2.11.0.jar
│ ├── failureaccess-1.0.1.jar
│ ├── guava-31.1-jre.jar
│ ├── j2objc-annotations-1.3.jar
│ ├── jsr305-3.0.2.jar
│ ├── listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
│ ├── log4j-api-2.20.0.jar
│ └── log4j-core-2.20.0.jar
...
Linux
cd build/distributions/CacheBuilder/bin
./CacheBuilder
视窗
cd build\distributions\CacheBuilder\bin
CacheBuilder.bat
然后您可以在控制台上找到输出消息。
并找到一个
logs
目录创建。
CacheBuilder
├── build
...
│ ├── distributions
│ │ ├── CacheBuilder
│ │ │ ├── bin
│ │ │ │ ├── CacheBuilder
│ │ │ │ ├── CacheBuilder.bat
│ │ │ │ └── logs
│ │ │ │ └── demoapp.log
因为你使用插件id 'application',
它将为您的应用程序名称
CacheBuilder.bat
或 CacheBuilder.bat
创建包装器命令,并构建分发文件:CacheBuilder.tar
或 CacheBuilder.zip
,在目录 distributions
下