我正在使用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消息?
提前致谢.
文件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)
但:
更新:
请在答案中添加类名和XML元素名称.没有正确的搜索条件,很难在谷歌上找到关于Log4J 2.x的任何信息.
我在我的应用程序中使用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) 我正在使用 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) 有没有办法在log4j的滚动文件附加器中用零填充?
例如 myfile-00001.txt
我正在使用第 3 方日志处理器,它按字典顺序读取文件,因此必须对文件进行填充...
我在 log4j 的 filePattern 中添加了以下内容,但我得到了空格。
${logPath}/myfile-%05i.txt
我正在尝试通过 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中。
有没有人知道如何解决这个问题?
谢谢,伊兰
我正在编写测试Java库的Java代码.该库包含自己的log4j2配置作为分发的一部分.
我想在我的测试代码中使用log4j2而不修改库的配置.
有没有办法为我的测试代码提供单独的log4j2配置?
这一切都作为命令行Java运行,根本没有服务器或Web参与.
编辑试图更清楚:我想要的是能够配置记录器,appender等供测试代码使用,同时让库代码使用自己独立的配置文件进行日志记录.我的想法是在我的测试代码中使用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输出任何内容.有没有办法做我想做的事情?
如果我没有在 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)
. .
我正在将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 ×9
log4j2 ×9
logging ×9
log4j ×6
amazon-emr ×1
apache-spark ×1
emr ×1
smtpappender ×1
utf-8 ×1
xinclude ×1
xml ×1