有人可以说我如何更改我的log4j2.xml以添加1个日志文件:一个级别跟踪和一个级别信息?
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="debug">
<appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
</Console>
<File name="DEBUG_FILE" fileName="debug.txt">
<PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud) 背景:像往常一样,我们有各种生命周期,如开发.stage,lt,prod所有这些都是在部署时从环境变量$ {lifecycle}中挑选出来的.所以JNDI设置我们将$ {lifecycle} .properties存储为变量datasource.jndi.name = jdbc/xxx.由于其他bean也在使用此属性文件,因此验证此类变量已加载且文件位于类路径中,但不知何故,我无法在下面的JDBC Appender中的log4j2.xml中使用此变量.
<JDBC name="DBAppender" tableName="V1_QUERY_LOG" bufferSize="4" ignoreExceptions="false">
<DataSource jndiName="${sys:datasource.jndi.name}" />
<Column name="event_date" isUnicode="false" isEventTimestamp="true" />
<Column name="log_level" isUnicode="false" pattern="%level" />
<Column name="logger" isUnicode="false" pattern="%logger" />
<Column name="message" isUnicode="false" pattern="%message" />
<Column name="exception_msg" isUnicode="false" pattern="%ex{full}" />
</JDBC>
Run Code Online (Sandbox Code Playgroud)
我也试过像"$ {datasource.jndi.name}"这样的选项,或者我有什么方法可以适应这个解决方案
<Properties>
<Property name="datasource.jndi.name">get datasource.jndi.name from {lifecycle}.properties</property>
</Properties>
Run Code Online (Sandbox Code Playgroud) 我正在编写测试Java库的Java代码.该库包含自己的log4j2配置作为分发的一部分.
我想在我的测试代码中使用log4j2而不修改库的配置.
有没有办法为我的测试代码提供单独的log4j2配置?
这一切都作为命令行Java运行,根本没有服务器或Web参与.
编辑试图更清楚:我想要的是能够配置记录器,appender等供测试代码使用,同时让库代码使用自己独立的配置文件进行日志记录.我的想法是在我的测试代码中使用log4j2,但无需更改库的配置文件.由于库配置文件是库分发的一部分,我不想更改它以进行测试.
我需要创建具有键值对的日志,如下所示.在PatternLayout中是否支持使用log4j2.xml为log_level,class_name,event_id等线程中的静态字段执行此操作.
样本日志:
2014年6月18日11:57:46719 LOG_LEVEL = "INFO" CLASS_NAME = "com.abc.dgl.App:main(158)" 名称= "应用程序启动事件" 事项标识="b88f7ea0-4cb1-438f-A728-ac7c2bdac578 "程序="测试应用程序"严重性='信息’行动='稳定部队加载文件处理’DESC ='道具被读取并加载’结果='成功’的原因='ABC’TRANSACTION_ID =" b88f7ea0-4cb1-438f-a728- ac7c2bdac578"
我认为这段代码很好地解释了我正在尝试做的事情
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 文件所做的工作,从另一个属性文件指定日志文件位置以保持配置简单以提供支持:
MyProperties props = MyProperties.getInstance();
System.setProperty(MyConstants.AUDIT_LOG_ENV_VAR,
props.getAuditLogFileName());
ConfigurationSource source =
new ConfigurationSource(new FileInputStream(new File(
System.getProperty(MyConstants.PROPERTIES_FILE_ENV_VAR)
+ "/log4j2.xml")));
Configurator.initialize(null, source);
Run Code Online (Sandbox Code Playgroud)
并且 log4j2 将选取并使用我的文件名,因为我已经使用 envvar 替换在 Appender 中指定了它:
<File name="AuditLogger" fileName="${sys:AUDIT_LOG}">
<PatternLayout pattern="DATETIME %d{yyyy-MM-dd HH:mm:ss:SSS zzz}%n%msg%n" />
</File>
Run Code Online (Sandbox Code Playgroud)
但是我不喜欢它,因为在下一行代码中再次读回文件名值之前,有一种将文件名值推送到系统环境的味道。
我喜欢使用ConfigurationFactory 以编程方式配置 log4j2,但似乎没有类似的方法可以在 log4j2.xml 文件之上构建更多内容 - 或者有吗?
我们从v2.5迁移到log4j v 2.6.1(不含GC).我想测量一下如何改进我们的应用程序(非基于Web).
我们在配置中所做的更改:
为了比较性能,我们记录GC输出 - 新版本有时需要更多时间每个GC(次要).它确实按预期分配了一些内存.分析确实显示已分配固定内存.
例如.2016-06-28T04:39:49.015 + 0100:1078.995:[GC(分配失败)[PSYoungGen:5603306K-> 91449K(6422528K)] 5603489K-> 91640K(7471104K),0.0332092秒] [次:用户= 0.21 sys = 0.00,实际= 0.03秒]
任何想法,如果我会缺少一些配置或其他方法来衡量这个?
Java版本:JRE 1.8u40 64位
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" name="foo" packages="">
<Appenders>
<!--old appenders-->
<!--<Async name="AsynchronousConsoleAppender" blocking="false" bufferSize="20000">-->
<!--<AppenderRef ref="ConsoleAppender"/>-->
<!--</Async>-->
<!--<Async name="AsynchronousFoo1Appender" blocking="false" bufferSize="20000">-->
<!--<AppenderRef ref="Foo1RollingFileAppender"/>-->
<!--</Async>-->
<!--<Async name="AsynchronousFoo2Appender" blocking="false" bufferSize="20000">-->
<!--<AppenderRef ref="Foo2RollingFileAppender"/>-->
<!--</Async>-->
<!--<Async name="AsynchronousFoo3Appender" blocking="false" bufferSize="20000">-->
<!--<AppenderRef ref="Foo3RollingFileAppender"/>-->
<!--</Async>-->
<Async name="AsynchronousSMTPAppender" blocking="false">
<Filters>
<RegexFilter regex=".*Reason: Refused invalid message \(Missing …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 8应用程序中使用org.apache.log4j,我希望每小时创建一个新的日志文件,其名称为:“ mylog.log.2014-09-24-18”。我阅读了我需要使用DailyRollingFileAppender的信息,但是当我启动该应用程序时,日志文件名为“ mylog.log”。
这是我的log4j.properties文件的内容:
# Set root logger level and its appenders
log4j.rootLogger=DEBUG, file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.file.Append=true
log4j.appender.file.File=mylog.log
log4j.appender.file.encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)
您能告诉我如何实现吗?
升级到 log4j2 2.6 版后,我面临以下警告:
2016-06-06 16:36:14,920 localhost-startStop-1 WARN The Logger foo.bar was created with the message factory org.apache.logging.log4j.spi.MessageFactory2Adapter@437958b6 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.
Run Code Online (Sandbox Code Playgroud)
在 2.5 版本中没问题,有什么评论吗?!
我在附加程序中看到日志消息