java - 如何纯粹以编程方式配置 log4j 2.x?

标签 java log4j log4j2

如何使用 console appender 配置 log4j 2.3纯编程(没有任何格式的配置文件)?

基本上我正在寻找 1.x code 的 2.x 版本.

然后我会在我的类(class)中使用

private static final Logger logger = LogManager.getLogger();
// 
    // some method
       logger.debug(someString);

没有任何配置我(如预期)面临

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

虽然配置文件的使用似乎是 properly documented ,我找不到一个简单的纯代码案例的好例子。

我得到的最接近的是 this article仍然使用虚拟文件。

这是我最好的(虽然完全不成功)的镜头:

private static void configureLog4J() {
    PatternLayout layout = PatternLayout.createDefaultLayout();
    ConsoleAppender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
    LoggerConfig loggerConfig = new LoggerConfig();
    loggerConfig.addAppender(appender, DEBUG, null);
}

我错过了什么吗?

如果仍然是 RTFM 案例,请指出正确的方向。

最佳答案

package com;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.layout.PatternLayout;

import java.nio.charset.Charset;

public class MyLoggerTest  {

    public static void main(String[] args){
        LoggerContext context= (LoggerContext) LogManager.getContext();
        Configuration config= context.getConfiguration();

        PatternLayout layout= PatternLayout.createLayout("%m%n", null, null, Charset.defaultCharset(),false,false,null,null);
        Appender appender=ConsoleAppender.createAppender(layout, null, null, "CONSOLE_APPENDER", null, null);
        appender.start();
        AppenderRef ref= AppenderRef.createAppenderRef("CONSOLE_APPENDER",null,null);
        AppenderRef[] refs = new AppenderRef[] {ref};
        LoggerConfig loggerConfig= LoggerConfig.createLogger("false", Level.INFO,"CONSOLE_LOGGER","com",refs,null,null,null);
        loggerConfig.addAppender(appender,null,null);

        config.addAppender(appender);
        config.addLogger("com", loggerConfig);
        context.updateLoggers(config);

        Logger logger=LogManager.getContext().getLogger("com");
        logger.info("HELLO_WORLD");


    }
}

不确定这是否是您要查找的内容。这将创建一个默认配置并添加一个控制台记录器。但是,LogManager.getLogger() 不起作用,并且使用 LogManager.getContext().getLogger() 不允许记录器层次结构。老实说我不推荐编程方法,Log4j2 对它过敏。

关于java - 如何纯粹以编程方式配置 log4j 2.x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30881990/

相关文章:

java - 除非测试,否则不会创建日志

java - 记录器的使用,参数化更好还是使用 + 添加参数?

java - 从 log4j 迁移到 lof4j2 时的 SpringBoot 问题

java - 为 log4j 添加微秒级

java - 更改 WAS 7 上特定 Web 应用程序的 System.out.println 输出目标

java - 围绕不执行的 Spring AOP 方面

java - 神秘玩2.4注入(inject)异常

java - 在 JSF 2.0 应用程序中使用 RichFaces 4

java - Log4j2 无法使用 json 配置文件

java - Gitflow 与 Maven 的工作流程 - 何时构建什么?