Java 如何解决-错误状态记录器未找到Log4j 2配置文件

Java 如何解决-错误状态记录器未找到Log4j 2配置文件,java,gradle,logging,intellij-idea,Java,Gradle,Logging,Intellij Idea,在IDE中运行时,使用Intellij我得到以下错误- 错误状态记录器未找到Log4j 2配置文件。使用默认值 配置(仅将错误记录到控制台)或用户 以编程方式提供的配置。设置系统属性 “log4j2.debug”显示Log4j 2内部初始化日志。看见 对于 有关如何配置Log4j 2的说明 当我运行jar文件时- trevor@trevor-Lenovo-YOGA-510-14AST:~/DELABLE/Master5/out/ARFACTIONS/Master5\u main\u jar$ 线

在IDE中运行时,使用Intellij我得到以下错误-

错误状态记录器未找到Log4j 2配置文件。使用默认值 配置(仅将错误记录到控制台)或用户 以编程方式提供的配置。设置系统属性 “log4j2.debug”显示Log4j 2内部初始化日志。看见 对于 有关如何配置Log4j 2的说明

当我运行jar文件时-

trevor@trevor-Lenovo-YOGA-510-14AST:~/DELABLE/Master5/out/ARFACTIONS/Master5\u main\u jar$ 线程“main”中的java-jar Master5.main.jar异常 java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory位于 BlockgetConnection.(BlockgetConnection.java:12)位于 BlockgetAccount.getAccountByName(BlockgetAccount.java:31)位于 BlockgetStart.main(BlockgetStart.java:8)由以下原因引起: java.lang.ClassNotFoundException:org.slf4j.LoggerFactory位于 java.net.URLClassLoader.findClass(URLClassLoader.java:382)位于 loadClass(ClassLoader.java:424)位于 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)位于 loadClass(ClassLoader.java:357)。。。3个以上

我没有显式地记录日志,我假设在合理的逻辑中,需要以某种方式记录日志。我把我的身材也包括在内。我已经包含了一些日志的依赖项。你知道解决办法吗

代码(主要类别)—

已使用此类的实例-

import ch.decent.sdk.DCoreApi;
import ch.decent.sdk.crypto.Address;
import ch.decent.sdk.crypto.Credentials;
import ch.decent.sdk.model.Account;
import ch.decent.sdk.model.AssetAmount;
import ch.decent.sdk.model.Fee;
import ch.decent.sdk.model.TransactionConfirmation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

@Component
public class BlockgetAccount {
    // connection to accounts
    private static final Long AMOUNT_OF_DCT_REQUIRED_FOR_CREATION = 100000L;

    @Autowired
    private BlockgetConnection connectionExample;
    @Autowired
    private BlockgetLogin loginExample;
    @Autowired
    private BlockgetGenerateKeys generateKeys;

    /**
     * Example of getting any account by its name.
     *
     * @param accountName name of the account e.g. dw-account
     * @return Account instance for given account name
     */
    public Account getAccountByName(String accountName) {

        connectionExample = new BlockgetConnection();
        final DCoreApi dcoreApi = connectionExample.connect();

        return dcoreApi
                .getAccountApi()
                .getByName(accountName)
                .blockingGet();
    }

    /**
     * Example of account creation with initial fee.
     *
     * @param newAccountName Unique account name that you wish to create.
     * @return Confirmation about transaction
     */
    public TransactionConfirmation createAccount(String newAccountName) {

        final DCoreApi dcoreApi = connectionExample.connect();
        final Credentials credentials = loginExample.login();
        final Address newAccountPublicKey = generateKeys.generateKeys();
        final AssetAmount dctAssetAmount = new AssetAmount(AMOUNT_OF_DCT_REQUIRED_FOR_CREATION);
        final Fee initialFee = new Fee(dctAssetAmount.getAssetId(), AMOUNT_OF_DCT_REQUIRED_FOR_CREATION);

        return dcoreApi.getAccountApi().create(
                credentials,
                newAccountName,
                newAccountPublicKey,
                initialFee
        ).blockingGet();
    }
}
格雷德尔先生-

plugins {
    id 'java'
}

group 'com.blockget.Master5'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

jar { manifest { attributes 'Main-Class': 'BlockgetStart' } }

allprojects {
    repositories {
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    // https://mvnrepository.com/artifact/org.springframework/spring-context
    // https://mvnrepository.com/artifact/org.springframework/spring-context
    compile group: 'org.springframework', name: 'spring-context', version: '5.1.8.RELEASE'
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-ap
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
// https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl
    compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.12.0'

    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation 'com.github.DECENTfoundation:DCoreKt-SDK:2.3.1'

}
我得到了这个罐子的分解-

trevor@trevor-Lenovo-YOGA-510 14AST:~/decent/Master5/out/artifacts/Master5_main_jar$ jar tf Master5.main.jar META-INF/MANIFEST.MF META-INF/ BlockgetNftMgr.class BlockgetLogin.class BlockgetConnection.class BlockgetNft.class BlockgetStart.class BlockgetAccount.class BlockgetGenerateKeys.class trevor@trevor-联想瑜伽510 14AST:~/DELATE/Master5/out/artifacts/Master5\u main\u jar$jar tf Master5.main.jar META-INF/MANIFEST.MF META-INF/ BlockgetNftMgr.class BlockgetLogin.class BlockgetConnection.class BlockgetNft.class BlockgetStart.class BlockgetAccount.class BlockgetGenerateKeys.class 记录器应该在这里吗?

如果您将“资源”目录标记为“资源根目录”,会有帮助吗

在这种情况下,您需要将log4j2.xml文件放在src文件夹下,以便能够在类路径上找到它。将其置于src/main/resourcessrc/test/resources

其他解决方案:使用系统属性-Dlog4j.configurationFile=file:/path/to/file/log4j2.xml

将“资源”目录标记为“资源根目录”是否有帮助

在这种情况下,您需要将log4j2.xml文件放在src文件夹下,以便能够在类路径上找到它。将其置于src/main/resourcessrc/test/resources


其他解决方案:使用系统属性-Dlog4j.configurationFile=file:/path/to/file/log4j2.xml

答案如下

  • 打开项目设置
    • 选择工件
    • 单击+添加新工件,选择JAR,然后选择类
    • 对于Jar文件,选择“复制到输出目录并通过清单链接”
    • (这不是默认设置)
    • 单击确定,然后应用
对于清单,我也没有使用默认值,而是使用项目的根级别


在这一切之后,所有的罐子都在一起,一切正常

答案如下

  • 打开项目设置
    • 选择工件
    • 单击+添加新工件,选择JAR,然后选择类
    • 对于Jar文件,选择“复制到输出目录并通过清单链接”
    • (这不是默认设置)
    • 单击确定,然后应用
对于清单,我也没有使用默认值,而是使用项目的根级别


在这一切之后,所有的罐子都在一起,一切正常

我添加了以下内容并删除了Apache日志记录,从而删除了IDE错误。CLI仍然保留—编译组:'org.slf4j',名称:'slf4j simple',版本:'1.7.26'。如果您只得到NoClassDefFoundError,请尝试添加实现slf4j依赖项:我已经在build.gradle文件中了。当我在CLI上尝试classpath时,它是空的。我不确定这是否是一个问题。我添加了以下内容并删除了Apache日志记录,从而删除了IDE错误。CLI仍然保留—编译组:'org.slf4j',名称:'slf4j simple',版本:'1.7.26'。如果您只得到NoClassDefFoundError,请尝试添加实现slf4j依赖项:我已经在build.gradle文件中了。当我在CLI上尝试classpath时,它是空的。我不确定这是否是一个问题。log4j2.json位于src/main/resources下,resources被标记为resources根目录,但没有任何更改。还是有例外。有什么提示吗?log4j2.json位于src/main/resources下,resources标记为resources根目录,但没有任何更改。还是有例外。有什么建议吗? trevor@trevor-Lenovo-YOGA-510 14AST:~/decent/Master5/out/artifacts/Master5_main_jar$ jar tf Master5.main.jar META-INF/MANIFEST.MF META-INF/ BlockgetNftMgr.class BlockgetLogin.class BlockgetConnection.class BlockgetNft.class BlockgetStart.class BlockgetAccount.class BlockgetGenerateKeys.class