小编Rem*_*pma的帖子

log4j2 SMTP Appender:如何将以前的消息包含在另一个级别?

我正在使用log4j2-beta9,我有以下配置(部分):

<Appenders>
    <SMTP name="Mailer" suppressExceptions="false"
          subject="${subject}" to="${receipients}" from="${from}"
          smtpHost="${smtpHost}" smtpPort="${smtpPort}"
          smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}"
          smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="20">
        <PatternLayout>
            <pattern>%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %m%n</pattern>
        </PatternLayout>
    </SMTP>

    <Async name="AsyncMailer">
        <AppenderRef ref="Mailer"/>
    </Async>
</Appenders>
<Loggers>
    <Root level="info">
        <AppenderRef ref="AsyncMailer" level="error"/>
    </Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)

使用此配置,我只收到1(一)错误消息的电子邮件.如何配置log4j2以接收1条错误消息和N条以前的LEVEL = INFO消息?

提前致谢.

java logging log4j smtpappender log4j2

5
推荐指数
1
解决办法
6031
查看次数

Log4J的默认MessageFactory是什么

文件org.apache.logging.log4j.Logger

   /**
     * Logs a message with parameters at the given level.
     *
     * @param level the logging level
     * @param message the message to log; the format depends on the message factory.
     * @param params parameters to the message.
     * @see #getMessageFactory()
     */
    void log(Level level, String message, Object... params);
Run Code Online (Sandbox Code Playgroud)

但:

  1. 当我设置任何时,使用哪个MessageFactory?
  2. 哪种消息格式使用默认工厂?
  3. 如果默认工厂无法满足我的需求,我该如何设置自己的工厂?

更新:

请在答案中添加类名和XML元素名称.没有正确的搜索条件,很难在谷歌上找到关于Log4J 2.x的任何信息.

java logging log4j log4j2

5
推荐指数
2
解决办法
2991
查看次数

如何用log4j2只记录一个级别?

我在我的应用程序中使用log4j2.

我想要的是一切都要去'调试'去控制台,一切到'info'去myapp.log,只有'info'去'myapp-audit.log'.

原因是,INFO主要包括对数据的成功修改(例如"用户创建","用户更新","用户删除"等).如果是有效的数据修改审计日志.

但我无法弄明白该怎么做.

如何才能获得"info"以登录"myapp-audit.log"?这是我目前的配置......

<?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="LogFile" fileName="myapp.log">
            <PatternLayout
                pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>

        <File name="AuditFile" fileName="myapp-audit.log">
            <PatternLayout
                pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
    </appenders>

    <loggers>
        <root level="debug">
            <appender-ref ref="Console" level="debug" />
            <appender-ref ref="LogFile" level="info" />
            <appender-ref ref="AuditFile" level="info" /> <!-- I want ONLY 'info' here -->
        </root>
    </loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)

java configuration logging log4j log4j2

5
推荐指数
1
解决办法
6050
查看次数

Log4j 2:无法在 RollingFileAppender fileName 和 filePattern 中使用 ContextMapLookup

我正在使用 log4j 2.0.2 进行日志记录。我试图将 ContextMapLookup 使用到 RollingFileAppender 的 fileName 和 filePattern 属性中,但我无法使其工作。

这是我在 REST 外观中的(简化的)Map 初始化:

@GET
public Response logSomething(@QueryParam("param") String param) {
    ThreadContext.put("someName", "default");
    LOGGER.info("Param from query: {}", param);
    ThreadContext.clearMap();
    return Response.ok().build();
}
Run Code Online (Sandbox Code Playgroud)

这是我的(简化的)配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n" />
    </Console>
    <RollingFile name="Rolling" 
                 fileName="logs/${ctx:someName}-webapps-metrics.log"
                 filePattern="logs/archives/${ctx:someName}-webapps-metrics-%i.log" >
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %m%n"/>
      <SizeBasedTriggeringPolicy size="5 KB"/>
    </RollingFile>
  </Appenders>
  <Loggers>

    <!-- My Logger using rollingFile -->
    <Logger name="com.ipanematech.rest.MyRESTFacade" level="info" additivity="false">
      <AppenderRef ref="Rolling" /> …
Run Code Online (Sandbox Code Playgroud)

java configuration logging rollingfileappender log4j2

5
推荐指数
1
解决办法
1874
查看次数

Log4j2 左填充文件名带零

有没有办法在log4j的滚动文件附加器中用零填充?

例如 myfile-00001.txt

我正在使用第 3 方日志处理器,它按字典顺序读取文件,因此必须对文件进行填充...

我在 log4j 的 filePattern 中添加了以下内容,但我得到了空格。

${logPath}/myfile-%05i.txt

java logging log4j log4j2

5
推荐指数
1
解决办法
837
查看次数

自定义 log4j 类不适用于 spark 2.0 EMR

我正在尝试通过 EMR 在 spark 2.0 中将日志写为 json。我能够使用自定义 log4j.properties 文件。

但是当我尝试使用自定义类(net.logstash.log4j.JSONEventLayoutV1)将输出更改为json时,出现以下异常:

log4j:ERROR Could not instantiate class [net.logstash.log4j.JSONEventLayoutV1].
java.lang.ClassNotFoundException: net.logstash.log4j.JSONEventLayoutV1
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
    at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:327)
    at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:124)
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:797)
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
    at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
    at org.apache.spark.internal.Logging$class.initializeLogging(Logging.scala:117)
    at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:102)
    at org.apache.spark.executor.CoarseGrainedExecutorBackend$.initializeLogIfNecessary(CoarseGrainedExecutorBackend.scala:161)
    at org.apache.spark.internal.Logging$class.log(Logging.scala:46)
    at org.apache.spark.executor.CoarseGrainedExecutorBackend$.log(CoarseGrainedExecutorBackend.scala:161)
    at org.apache.spark.executor.CoarseGrainedExecutorBackend$.run(CoarseGrainedExecutorBackend.scala:172)
    at org.apache.spark.executor.CoarseGrainedExecutorBackend$.main(CoarseGrainedExecutorBackend.scala:270)
    at org.apache.spark.executor.CoarseGrainedExecutorBackend.main(CoarseGrainedExecutorBackend.scala)
Run Code Online (Sandbox Code Playgroud)

这是 log4j.properties 的样子:

log4j.rootCategory=INFO, json

log4j.appender.json=org.apache.log4j.ConsoleAppender 
log4j.appender.json.target=System.err 
log4j.appender.json.layout=net.logstash.log4j.JSONEventLayoutV1
Run Code Online (Sandbox Code Playgroud)

工件“jsonevent-layout”被组装在fat-jar中。

有没有人知道如何解决这个问题?

谢谢,伊兰

log4j amazon-emr emr apache-spark

5
推荐指数
1
解决办法
827
查看次数

如何为log4j2使用多个配置文件

我正在编写测试Java库的Java代码.该库包含自己的log4j2配置作为分发的一部分.

我想在我的测试代码中使用log4j2而不修改库的配置.

有没有办法为我的测试代码提供单独的log4j2配置?

这一切都作为命令行Java运行,根本没有服务器或Web参与.

编辑试图更清楚:我想要的是能够配置记录器,appender等供测试代码使用,同时让库代码使用自己独立的配置文件进行日志记录.我的想法是在我的测试代码中使用log4j2,但无需更改库的配置文件.由于库配置文件是库分发的一部分,我不想更改它以进行测试.

java xml logging xinclude log4j2

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

如何配置log4j2的加法性以尊重父级?

我认为这段代码很好地解释了我正在尝试做的事情

package us.benanderson;

public class MyClass {

  private static final Logger LOG = LogManager.getLogger(MyClass.class);
  ...
    // within a method
    LOG.debug("only output to appFile");
    LOG.error("output to both appFile and errorFile");
Run Code Online (Sandbox Code Playgroud)

这就是我猜应该是我的配置

<Loggers>
    <Logger name="us.benanderson" level="debug" additivity="true">
        <AppenderRef ref="appFile" />
    </Logger>

    <Root level="error">
        <AppenderRef ref="errorFile" />
    </Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)

但是,我发现当additivity ="true"时,调试消息也会输出到errorFile.当additivity ="false"时,不会向errorFile输出任何内容.有没有办法做我想做的事情?

java configuration logging log4j log4j2

4
推荐指数
1
解决办法
8623
查看次数

Log4j2 配置 - 如果没有为记录器设置 AppenderRef 会发生什么?

如果我没有在 log4j2.xml 中为记录器配置显式设置 AppenderRef 会发生什么?默认情况下它会使用所有附加程序吗?

. .

<Logger name="com.package1" level="error"/>

<Root level="error">
  <AppenderRef ref="LOGFILE"/>
  <AppenderRef ref="CONSOLE"/>
</Root>
Run Code Online (Sandbox Code Playgroud)

. .

java configuration logging log4j2

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

当我编写相同的UTF-8时,为什么Log4J2输出在两个系统上有所不同?

我正在将Unicode字符写入Log4J2日志.在一台机器上(Windows 8),我在日志中看到了这一点:

2016-08-30 16:44:00.958|English:  The quick brown fox jumped over the lazy dog.
2016-08-30 16:44:00.960|German:  Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.
2016-08-30 16:44:00.960|Russian 1:  ? ????? ??? ??? ?? ??????? ??, ?? ????????? ?????????!
2016-08-30 16:44:00.960|Russian 2:  ????? ?? ??? ???? ?????? ??????????? ????? ?? ????? ???.
2016-08-30 16:44:00.960|Chinese:  ?????????
2016-08-30 16:44:00.960|Japanese:  ??????? ????? ?????? ????? ??????? ????? ??????? ?????
2016-08-30 16:44:00.960|Korean:  ??? ? ???? ???
Run Code Online (Sandbox Code Playgroud)

在另一台计算机(Windows Server 2012R2)上,我看到:

2016-08-30 16:50:41.676|English:  The quick brown fox jumped over the …
Run Code Online (Sandbox Code Playgroud)

java logging utf-8 log4j2 windows-server-2012-r2

4
推荐指数
1
解决办法
2886
查看次数