当前位置: 首页 > 知识库问答 >
问题:

使用ConfigurationBuilder以编程方式配置Log4j2

司徒英卓
2023-03-14

Im使用Log4j2 2.6.2。在应用程序的开始,我调用以下代码

ConfigurationBuilder< BuiltConfiguration > builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel( Level.ERROR );
builder.setConfigurationName("OverrideDefaultConsoleLayout");
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout").addAttribute("pattern", "%% %msg%n"));       
builder.add(appenderBuilder);
builder.add(builder.newLogger("Log4j2Test", Level.DEBUG).add(builder.newAppenderRef("Stdout")).addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.DEBUG).add(builder.newAppenderRef("Stdout")));
Configurator.initialize(builder.build());
LogManager.getLogger("Log4j2Test").error("Output % followed by this message");
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 

输出显示为

15:43:50.865 [main] ERROR Log4j2Test - Output % followed by this message

即默认布局正在使用中。我对默认值的编程重写不起作用。有谁能帮你修改代码吗?

共有1个答案

闽承望
2023-03-14

仅仅调用你展示的代码可能行不通。需要将其编码为扩展ConfigurationFactory的类,并用@plugin进行注释,以便Log4j能够发现它并使用它,而不是寻找配置文件。

您链接到的Log4j手册页面上的示例代码显示了如何执行此操作。

 类似资料:
  • 问题内容: 我试图仅通过使用和此参考来配置和设置Log4j2 。我使用的代码如下: 注意 它扩展了默认情况下已经配置的控制台 它尝试向根记录器添加滚动文件追加器 我得到以下异常: 如果我在上面的代码之后注释掉该代码,它可以工作,但似乎缺少配置滚动文件附加程序的内容。我应该怎么做才能解决这个问题? 问题答案: 在 log4j 2.x中, 您必须以这种方式指定日期格式 标记格式的开始 表示它是日期格式

  • 我在logback.xml中定义了一个logback appender,它是一个DB appender,但是我想知道是否有任何方法可以使用我自己定义为bean的连接池在java中配置appender。 我发现了类似的事情,但从来没有真正的答案。

  • 我正在尝试使用我自己的应用程序实现或扩展的ResourceConfig或PackageResourceConfig来配置我的Jersey应用程序。因此,我的第一次尝试是将现有的web.xml(实际上,由于开发的库性质,我使用的是web-fragment.xml)配置移植到MyApplication实现。 当我使用第二个版本时,我会收到以下信息 正如您所看到的,是第一个注册的类,但由于它不是公共的,

  • 什么是最简单的方法,以获得Spring引导好,但不试图自动配置所有的东西?例如,要只使用我们已经配置的属性(一些通过Consul+Spring Cloud加载)运行flyway,我希望可以做一些类似的事情: 并且让main方法只调用 这样做的问题是,它会拾取所有的组件扫描/其他依赖项的长列表。任何具体配置依赖项的方法(但仍然获得框架的nicities)

  • 问题内容: 说我有两个JavaBeans 和。 如果创建一个Person对象的列表,我想编组成这样的东西: 可以使用这里描述的技术: 使用JAXB解组/编组List 通过使用和注释JaxbList,可以将其编组为上述XML。 但是,能够重用相同的类来封送对象列表也很好。实际上,我将有许多其他类型的bean。我可以这样: 但是,理想情况下,最好用类名的复数形式替换“列表”,用类名替换“ item”。

  • 问题内容: 我在logback.xml中定义了一个logback附加程序,它是一个数据库附加程序,但是我很好奇是否有任何方法可以使用定义为bean的我自己的连接池在java中配置附加程序。 我发现类似的事情,但没有实际答案。 问题答案: 这是一个对我有用的简单示例(请注意,在此示例中我使用FileAppender)