标签: log4j2

如何指定Log4J 2.x配置位置?

有没有办法log4j2.xml手动指定Log4J 2.x 文件位置(如DOMConfigurator在Log4J 1.x中),而不会弄乱类路径和系统属性?

java configuration logging log4j log4j2

16
推荐指数
4
解决办法
3万
查看次数

如何将多个SLF4J绑定排除到LOG4J

我收到了错误

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.apache.logging.log4j/log4j-slf4j-impl/2.0-beta8/jar/15984318e95b9b0394e979e413a4a14f322401c1/log4j-slf4j-impl-2.0-beta8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.slf4j/slf4j-log4j12/1.5.0/jar/aad1074d37a63f19fafedd272dc7830f0f41a977/slf4j-log4j12-1.5.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Run Code Online (Sandbox Code Playgroud)

在我的build.gradle文件中,我有以下行包含jar log4j-slf4j-impl-2.0-beta8.jar(我想绑定到LOG4J2)

 compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.0-beta8' 
Run Code Online (Sandbox Code Playgroud)

在依赖项目中的另一个build.gradle文件中,我有多行类似于以下内容:

 compile 'dcm4che:dcm4che-core:2.0.23'
Run Code Online (Sandbox Code Playgroud)

现在dcm4che包含对log4j版本1(slf4j-log4j12)的依赖,因此它包含在整个项目中.

以下是Gradle依赖关系树的片段:

|    +--- dcm4che:dcm4che-core:2.0.23
|    |    \--- org.slf4j:slf4j-log4j12:1.5.0
|    |         +--- org.slf4j:slf4j-api:1.5.0 -> 1.7.5
|    |         \--- log4j:log4j:1.2.13 -> 1.2.14
Run Code Online (Sandbox Code Playgroud)

我已经阅读了警告中建议的链接 ,但我无法弄清楚如何使用我想要的jar将我的应用程序绑定到log4j2.关于依赖管理的Gradle文档并没有真正使它更清楚.

java logging slf4j gradle log4j2

16
推荐指数
3
解决办法
3万
查看次数

我的log4j2日志文件总是有每行的双倍输出.我怎么能停止复制呢?

我的log4j2日志文件始终具有每行的双倍输出.我怎么能停止复制呢?

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
    <properties>
        <property name="name">CernerPharmacyWebApp</property>
        <property name="pattern">%d %-5p %C{2} (%F:%L) - %m%n</property>
    </properties>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout><pattern>${pattern}</pattern></PatternLayout>
        </Console>
        <RollingFile name="ROLLING_FILE" fileName="..\logs\${name}.log"
                     filePattern="..\logs\${name}-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout><pattern>${pattern}</pattern></PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/><!-- Rotated everyday -->
                <SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 50 MB -->
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="error">
            <!-- <AppenderRef ref="CONSOLE"/> -->
            <AppenderRef ref="ROLLING_FILE"/>
        </Root>
        <!-- Controls packages -->
        <Logger name="com.jarmel.pharmacy.controls.BarCodeOrderServlet" level="trace">
            <!-- <AppenderRef ref="CONSOLE"/> -->
            <AppenderRef ref="ROLLING_FILE"/>
        </Logger>
        <Logger name="com.jarmel.pharmacy.controls.GetCodeValues" level="error">
            <!-- <AppenderRef ref="CONSOLE"/> --> …
Run Code Online (Sandbox Code Playgroud)

java configuration logging log4j log4j2

16
推荐指数
1
解决办法
8782
查看次数

使用slf4j和log4j2动态添加appender

我想动态创建一个appender并将其添加到记录器.但是,这似乎不可能与slf4j.我可以将我的appender添加到log4j记录器,但后来我无法使用slf4j LoggerFactoy检索记录器.

我想做什么:我创建一个测试类(不是jUnit测试)并在构造函数中传递一个记录器供测试类使用.测试类的每个实例都需要它自己的记录器和追加器来保存日志,以便以后可以在HTML报告中使用它.

我尝试了什么(为简单起见,我创建了一个jUnit测试):

  import static org.junit.Assert.assertEquals;

  import java.util.LinkedList;
  import java.util.List;

  import org.apache.logging.log4j.core.LogEvent;
  import org.junit.Test;
  import org.slf4j.helpers.Log4jLoggerFactory;

  import ch.fides.fusion.logging.ListAppender;

  public class ListAppenderTest {

      @Test
      public void test() {

          String testName = "test1";

          // the log messages are to be inserted in this list
          List<LogEvent> testLog = new LinkedList<>();

          // create log4j logger
          org.apache.logging.log4j.core.Logger log4jlogger = (org.apache.logging.log4j.core.Logger) org.apache.logging.log4j.LogManager
                                          .getLogger("Test:" + testName);

          // create appender and add it to the logger
          ListAppender listAppender = new ListAppender("Test:" + testName + ":MemoryAppender", testLog);
          log4jlogger.addAppender(listAppender); …
Run Code Online (Sandbox Code Playgroud)

java logging slf4j log4j2

16
推荐指数
3
解决办法
3万
查看次数

使用log4j2进行Spring-Boot日志记录?

我正在使用spring-boot-starter,并希望配置log4j2.xml为将异步+不同的内容记录到不同的日志文件.

我创建了log4j2文件,但Spring仍然使用spring-boot默认日志记录.如何切换日志记录?

java spring log4j log4j2 spring-boot

16
推荐指数
2
解决办法
2万
查看次数

LOG4J2:以编程方式配置时禁用"找不到log4j2配置文件.."

我没有使用任何XML配置文件,而是以编程方式设置记录器配置.记录器工作正常但是当我调用下面代码的第一行时,会ERROR显示一条警告消息,告诉我找不到配置文件,将使用默认配置.

但是我不希望每次打开程序时都会在控制台上显示此消息,因为我将以编程方式自行添加配置.

消息:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Run Code Online (Sandbox Code Playgroud)

当我调用下面的代码时,它会出现:

LoggerContext context = (LoggerContext) LogManager.getContext(false);
Run Code Online (Sandbox Code Playgroud)

或者如果我先获得根记录器:

Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
Run Code Online (Sandbox Code Playgroud)

是否有某种属性可以设置为禁用此消息显示?还是另一种方法?

注意:我通过设置属性禁用了有关Log4j2 JMX的其他通知-Dlog4j2.disable.jmx=true.但我找不到这个.

java log4j2

16
推荐指数
2
解决办法
1万
查看次数

按需重新加载log4j2配置

我将log4j2.xml配置文件设置为每30秒检查一次:

<Configuration status="WARN" monitorInterval="30">
    ...
</Configuration>
Run Code Online (Sandbox Code Playgroud)

是否有可能以编程方式告诉log4j2检查配置中的更改而不是超时?

NB我不想以编程方式加载指定配置文件的配置,我只想告诉log4j2检查之前加载的配置文件,就好像monitorInterval已过期一样.

谢谢!

java configuration logging log4j log4j2

16
推荐指数
2
解决办法
1万
查看次数

如何在Java Spring Boot中更改log4j2.xml的默认位置?

Log4j2与Spring Boot通过log4j2.xml根类路径中的配置文件很好地协同工作,正如文档所述.

当尝试将此文件移动到其他位置时,我无法在启动时将新位置传递给Spring.从文档:

可以通过在类路径中包含适当的库来激活各种日志记录系统,并通过在类路径的根目录中或在Spring Environment属性指定的位置 logging.config提供合适的配置文件来进一步自定义.

我尝试使用Java系统属性设置新位置

java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar
Run Code Online (Sandbox Code Playgroud)

或使用application.properties包含相关财产的外部

logging.config=classpath:/config/log4j2.xml
Run Code Online (Sandbox Code Playgroud)

但我经常受到以下错误消息的欢迎.

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Run Code Online (Sandbox Code Playgroud)

java log4j log4j2 spring-boot

16
推荐指数
3
解决办法
3万
查看次数

dynamodb 本地:错误 StatusLogger Log4j2 找不到日志记录实现

这是我第一次遇到这个问题,我在 Linux 和 Mac 上使用本地 DynamoDB 并且大部分时间它都运行良好,现在我在另一台 Mac 机器上,它只是抛出一个错误。

我得到的错误信息是:

ERROR StatusLogger Log4j2 could not find a logging implementation. 
Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
Run Code Online (Sandbox Code Playgroud)

我尝试通过自制软件安装它,但它抛出了同样的错误。我可能在我的机器上搞砸了一些东西,或者可能错过了一些配置。

下面是我尝试运行它时的屏幕截图:

在此处输入图片说明

参考:
Dynamo DB 本地:https : //docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html

log4j2 amazon-dynamodb-local

16
推荐指数
1
解决办法
2545
查看次数

如何验证log4j2是通过LMAX disruptor异步记录的?

我正在开发一个Eclipse RCP应用程序,并且已经付出了一些努力让log4j2在应用程序中运行.现在一切似乎工作正常,作为画龙点睛,我想让所有记录器异步.

我已经设法在类路径上获得LMAX Disruptor,并认为我已经解决了提供的问题sun.misc.-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector在运行配置中设置VM参数,并正确设置log4j2.xml文件.我想.这就是问题所在.我希望能够以正确的方式验证我的应用程序以异步方式记录,因此我可以享受延迟方面的好处.

我怎么能 - 然后 - 在过程中利用LMAX Dirsuptor验证我的记录器是否异步工作?

java logging asynchronous log4j log4j2

15
推荐指数
2
解决办法
5278
查看次数