我在 log4j2 xml 中配置了 JDBC 附加程序
<JDBC name="databaseAppender" tableName="TL_FX_LOG">
<ConnectionFactory class="org.apache.jmeter.protocol.java.test.ConnectionFactory" method="getDatabaseConnection" />
<Column name="LOG_DATE" isEventTimestamp="true" />
<Column name="LOG_DESC" pattern="%message" />
<Column name="LOG_Batch" literal="someproperty" />
Run Code Online (Sandbox Code Playgroud)
我需要从 Java 代码设置文字(LOG_Batch)的值。
Logger.debug("hello");
Run Code Online (Sandbox Code Playgroud)
hello 将作为 %message 值传递。但是如果我有一个变量
String log_batch="test";
Run Code Online (Sandbox Code Playgroud)
如何将 log_batch 变量值传递给 JDBC 附加程序。
我希望在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 中编写我自己的 RewritePolicy。该文件指出:
RewritePolicy 是一个接口,它允许实现在传递给 Appender 之前检查并可能修改 LogEvent。RewritePolicy 声明了一个必须实现的名为 rewrite 的方法。该方法通过 LogEvent 传递,可以返回相同的事件或创建一个新的事件。
这是我的java类:
public final class MarkerInjectorRewritePolicy implements RewritePolicy {
@Override
public LogEvent rewrite(final LogEvent event) {
final Marker marker = event.getMarker();
if (marker == null)
return event;
// If there's a Marker, add it to the ThreadContextMap so the RoutingAppender can properly routes log messages
event.getContextMap().put("_marker", marker.getName());
return event;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的yaml 配置文件:
Rewrite:
name: REWRITE_APPENDER
AppenderRef:
ref: ROUTING_APPENDER
PropertiesRewritePolicy:
Property: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Spring Web应用程序中从迁移log4j 1到log4j 2。构建它时,出现以下错误:
2015-08-10 16:26:36,222 DEBUG Built Plugin[name=AppenderRef] OK from factory method.
2015-08-10 16:26:36,222 DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for builder factory method...
2015-08-10 16:26:36,222 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger. Going to try finding a factory method instead.
2015-08-10 16:26:36,223 DEBUG Still building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for factory method...
2015-08-10 16:26:36,223 DEBUG Found factory method [createLogger]: public static org.apache.logging.log4j.core.config.LoggerConfig org.apache.logging.log4j.core.config.LoggerConfig$RootLogger.createLogger(java.lang.String,org.apache.logging.log4j.Level,java.lang.String,org.apache.logging.log4j.core.config.AppenderRef[],org.apache.logging.log4j.core.config.Property[],org.apache.logging.log4j.core.config.Configuration,org.apache.logging.log4j.core.Filter).
2015-08-10 16:26:36,224 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element Root …Run Code Online (Sandbox Code Playgroud) 是否可以将MemoryMappedFile与策略一起使用以将文件分解为固定大小,例如250MB?我的log4j2.xml是这样的,但我想将日志文件分解为250MB,我需要使用MemoryMappedFile来实现IO性能.
<Configuration monitorInterval="30">
<Appenders>
<MemoryMappedFile name="MemoryMap" fileName="output/jscsi-out.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c{2} - %m%n(%L)" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB" />
</Policies>
</MemoryMappedFile>
</Appenders>
<Loggers>
<Logger name="br.com" level="debug" additivity="false">
<AppenderRef ref="MemoryMap" />
</Logger>
<Logger name="org.jscsi.target.TargetServer" level="debug"
additivity="false">
<AppenderRef ref="MemoryMap" />
</Logger>
<Logger name="org.jscsi.target.storage" level="info"
additivity="false">
<AppenderRef ref="MemoryMap" />
</Logger>
<Logger name="org.jscsi.service" level="debug" additivity="false">
<AppenderRef ref="MemoryMap" />
</Logger>
<Root level="error" includeLocation="true">
<AppenderRef ref="MemoryMap" />
</Root>
</Loggers>
</Configuration>
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 版本中没问题,有什么评论吗?!
我在附加程序中看到日志消息
在Log4j 1.2中,您可以简单地使用记录器并在运行时添加一个appender.例如,这对于测试目的而言非常方便.我们曾经创建了一个模拟appender并将其添加到记录器中.随后我们可以做出不同的断言.
与log4j2有什么相同之处?
该log4j2页显示了如何添加附加目的地的几个例子.但是,它们会在整体上下文中添加appender.这似乎与为一个特定记录器添加appender不同.
另一个观察是,如果你使用org.apache.logging.log4j.core.Logger而不是org.apache.logging.log4j.Logger,你仍然可以添加appender.但是大多数人使用org.apache.logging.log4j.Logger.实际上,LogManager返回org.apache.logging.log4j.Logger的一个实例.所以,我不知道如何连接这两个类以及它们是否应该连接.
另一个观察是,如果我打电话
LogManager.getContext().getConfiguration().getLoggers()
Run Code Online (Sandbox Code Playgroud)
我可以在上下文中获取所有LoggerConfig对象的ist.我随后将appender添加到任何LoggerConfig对象.但问题是,如何获取与org.apache.logging.log4j.Logger实例相关的LoggerConfig?
这让我很困惑.
Eclipse,Selenium,Windows
导入org.apache.log4j无法解析
我已经遵循了我能找到的所有记录的步骤,即:
1)以下两个jar文件位于项目构建路径中:log4j-core-2.6.2.jar和log4j-api-2.6.2.jar
2)以上两个jar文件位于以下文件夹中:C:\ eclipse\apache-log4j-2.6.2-bin
3)上面的文件夹在我的系统CLASSPATH环境变量C:\ eclipse\apache-log4j-2.6.2-bin中
4)项目在项目根目录中包含以下log4j.properties文件
# This sets the global logging level and specifies the appenders
log4j.rootLogger=INFO, theConsoleAppender
# settings for the console appender
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Run Code Online (Sandbox Code Playgroud)
5)我已经清理了这个项目
6)导入失败的是:import org.apache.log4j.Logger;
间歇性地我也收到此错误消息
"类型org.apache.log4j.Logger无法解析.它在第一行间接引用所需的.class文件":
包com.example;
当我执行项目时,此错误消失 - >清除
但导入log4j的错误仍然存在.
任何想法将不胜感激.
以下log4j2.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<Property name="log-path">C:/logs</Property>
</Properties>
<Appenders>
<RollingFile name="RollingFile" fileName="${log-path}/myexample.log"
filePattern="${log-path}/myexample-%d{yyyy-MM-dd}-%i.log" >
<PatternLayout>
<pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1 KB" />
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="root" level="debug" additivity="false">
<appender-ref ref="RollingFile" level="debug"/>
</Logger>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
以下输出将打印到标准输出。
2016-08-22 19:21:59,384 main DEBUG Initializing configuration XmlConfiguration[location=jar:file:/C:/demo-program-1.0-SNAPSHOT.jar!/log4j2.xml]
2016-08-22 19:21:59,415 main DEBUG Installed script engines
2016-08-22 19:22:00,509 main DEBUG Oracle Nashorn Version: 1.8.0_101, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, …Run Code Online (Sandbox Code Playgroud) 我正在使用log4j2配置xml,我正在使用环境变量来设置这样的日志级别
<Root level="${env:LOG_LEVEL}">
Run Code Online (Sandbox Code Playgroud)
但我希望有一些默认值,以防env var未设置我尝试在xml中定义一些属性但没有运气.谢谢