标签: log4j2

Log4J2 - 在运行时分配文件appender文件名

我在类路径中有一个log4j2.xml配置文件.其中一个appender是File appender,我想在Java应用程序中的运行时设置目标文件名.

根据文档,我应该能够在log4j2.xml文件中使用双"$"和上下文前缀:

<appenders>
    <File name="MyFile" fileName="$${sys:logFilename}">
        <PatternLayout pattern="%-4r %d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</appenders>
Run Code Online (Sandbox Code Playgroud)

其中"sys"前缀表示Configurator将在系统属性中查找属性"logFilename".所以在应用程序中,我打电话(相当早):

System.setProperty("logFilename", filename);
Run Code Online (Sandbox Code Playgroud)

我还在xml文件中打开了log4j2的自动重新配置:

<configuration status="debug" monitorInterval="5">>
Run Code Online (Sandbox Code Playgroud)

不幸的是,这没有任何效果,并且永远不会创建日志文件.一些log4j2状态输出如下:

2013-02-13 15:36:37,574 DEBUG在类org.apache.logging.log4j.core.appender.FileAppender上调用createAppender for element with params(fileName ="$ {sys:logFilename}",append ="null" ,locking ="null",name ="MyFile",immediateFlush ="null",suppressExceptions ="null",bufferedIO ="null",PatternLayout(% - 4r%d {yyyy-MM-dd/HH:mm:ss .SSS/zzz} [%t]%-5level%logger {36} - %msg%n),null)

2013-02-13 15:36:37,576 DEBUG启动FileManager $ {sys:logFilename}

如何在运行时设置File Appender中的"fileName"值? 或者,如何在运行时向根记录器添加新的File Appender?在Log4j 2.0中,大多数用于更改配置的API都是隐藏的.

java log4j log4j2

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

Log4J2属性替换 - 默认

我只是想知道是否有办法为LOG4J中的属性替换提供默认值?

我想在java系统属性中传递文件路径,然后将其与"$ {env:mySystemProperty}"一起使用.但是如果开发人员忘记设置此属性呢?然后我想在log4j2.xml中定义一些有意义的默认值.

知道如何实现这个功能吗?

编辑:

env替换对我不起作用:

standalone.conf

-DoauthLoginLogPath=/path/oauth2.log
Run Code Online (Sandbox Code Playgroud)

log44j2.xml

<Appender type="File" name="File" fileName="${env:oauthLoginLogPath}" immediateFlush="true">
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}" immediateFlush="true">
Run Code Online (Sandbox Code Playgroud)

我可以在wildfly控制台中看到该属性,我重新启动了服务器,但我无法完成它.

java logging log4j log4j2

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

log4j2 xml配置 - 登录到文件和控制台(具有不同级别)

我想做两件事:

  1. 使用特定日志级别登录到控制台
  2. 使用其他日志级别登录到文件

控制台日志记录似乎工作得很好,但日志文件仍然是空的.

这是我的log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <File name="MyFile" fileName="logs/app.log" immediateFlush="true">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>  

  </appenders>
  <loggers>

    <logger name="filelogger" level="error">
        <appender-ref ref="MyFile"/>
    </logger>

    <root level="info">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)

可能有什么问题?

xml log4j log4j2

38
推荐指数
4
解决办法
5万
查看次数

Log4j2为什么要在log4j上使用它?

我必须遗漏一些东西,但我现在已经看了几天了,但为什么你会在log4j上使用log4j2(性能除外)?

从我到目前为止看到的,log4j2被宣传为更简单的配置,但它实际上要复杂得多(现在已经三天了,我仍然无法在我的主目录中写日志).自动配置对我来说根本不起作用(或者至少我无法使其工作),配置文件本身在结构上要复杂得多,并且在运行时添加内容以帮助诊断变得更加困难.

所以除了性能之外还有什么理由使用log4j2而不是原始的log4j?

java logging log4j log4j2

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

在Log4j2中,如何将XML Schema与log4j2.xml相关联?

我一直在给新的Log4j2.从迁移文档中可以看出,XML Schema/DTD规范已被废除.

这似乎是倒退一步.当然应该可以将XML Schema或DTD与我联系起来,log4j2.xml以协助编写和验证.我无法在文档中找到任何有用的东西,也没有找到XML Schema或DTD本身.

那么:在Log4j2中,我应该如何将XML Schema与log4j2.xml

java log4j log4j2

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

如何以编程方式在运行时添加Log4J2 appender?

是否可以使用XML配置中的规范以编程方式添加Log4J2 appender?

我打算在log4j2.xml中定义它,然后像这样选择appender(不会编译):

if (arg[0].equals("log") ) {
    Logger.getLogger("loggerNameFromXMLConfig").addAppender("appenderNameFromXMLConfig");
} else {
    //...
}
Run Code Online (Sandbox Code Playgroud)

java logging log4j log4j2

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

以编程方式加载Log4j2配置文件

我想从我的应用程序以编程方式加载Log4j2 XML配置文件.

试过这个:

ConfigurationSource source = new ConfigurationSource();
source.setLocation(logConfigurationFile);
Configurator.initialize(null, source);
Run Code Online (Sandbox Code Playgroud)

还有这个:

ConfigurationSource source = new ConfigurationSource();
source.setLocation(logConfigurationFile);
ConfigurationFactory factory = (ConfigurationFactory) XMLConfigurationFactory.getInstance().getConfiguration(source);
ConfigurationFactory.setConfigurationFactory(factory);
Run Code Online (Sandbox Code Playgroud)

但是没有任何效果.

java logging log4j2

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

log4j 2向控制台appender添加多种颜色

嗨,我刚刚下载并配置了log4j-2.我坚持将颜色代码应用于SlowConsole控制台appender.我的控制台appender如下所示.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SlowConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} %-5level %logger{36}.%M() @%L - %msg%n}{FATAL=red, ERROR=red, WARN=yellow, INFO=black, DEBUG=green, TRACE=blue}"/>
        </Console>
        <File name="File" fileName="C:\log\out.txt">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n" />
        </File>
    </Appenders>
    <Loggers>
        <logger name="org.abc.ea.web" level="ALL" additivity="false">
            <!--Log4j for the WEB MODULE -->
            <appender-ref ref="SlowConsole"/>
        </logger>
        <logger name="org.abc.ea.ejb" level="ALL" additivity="false">
            <!--Log4j for the EJB MODULE -->
            <appender-ref ref="SlowConsole"/>
        </logger>
        <Root level="ERROR">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File" …
Run Code Online (Sandbox Code Playgroud)

java xml java-ee log4j2

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

Log4j2 - 配置

我正在尝试在我的新项目中采用Log4j2,但我得到了我的日志catalina.out,第一个始终是:ERROR StatusLogger Unable to locate a logging implementation, using SimpleLogger.看来我已根据Log4j2文档完成了所有工作,但仍然如此.

这是我实际做的:

  1. 添加log4j-api-2.0-beta3.jar到我的项目中
  2. 创建了一个log4j2.xml文件并将其放在类路径上的位置(当前,在/usr/local/tomcat/home/lib.实际上,我从Log4J2网页中获取了一个示例文件.
  3. 重启tomcat.

我使用的是Tomcat 7,MacOS X 10.8,Java 7.

我错过了什么?

以防万一,这是我正在使用的log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="warn" name="MyApp" packages="">
  <appenders>
    <File name="MyFile" fileName="logs/app.log">
      <PatternLayout>
        <pattern>%d %p %C{1.} [%t] %m%n</pattern>
      </PatternLayout>
    </File>
  </appenders>
  <loggers>
    <root level="trace">
      <appender-ref ref="MyFile"/>
    </root>
  </loggers>
</configuration>

java configuration logging log4j log4j2

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

运行由shade插件构建的独立应用程序时找不到Log4j2配置

我有应用程序,当我从maven log4j2运行时它正在工作:

mvn exec:java -Dexec.args=...
Run Code Online (Sandbox Code Playgroud)

但是当我将jar作为独立应用程序运行时,它会显示错误:

java -jar
Run Code Online (Sandbox Code Playgroud)

日志:

ERROR StatusLogger Unrecognized format specifier [d]
ERROR StatusLogger Unrecognized conversion specifier [d] starting at position 16 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [thread]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [level]
ERROR StatusLogger Unrecognized conversion specifier [level] starting at position 35 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [logger]
ERROR StatusLogger Unrecognized conversion specifier [logger] starting at …
Run Code Online (Sandbox Code Playgroud)

java maven-shade-plugin log4j2

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

标签 统计

log4j2 ×10

java ×9

log4j ×7

logging ×5

xml ×2

configuration ×1

java-ee ×1

maven-shade-plugin ×1