我配置我的log4net来监视对app.config文件所做的更改.
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序并更改配置文件中的内容时,这些更改仅在我重新启动应用程序时生效.为什么会这样?
还有办法告诉log4net监视app.config中的更改吗?喜欢:
<appender name="FileAppender" type="log4net.Appender.FileAppender" >
<watch value="true" />
</appender>
Run Code Online (Sandbox Code Playgroud)
-------------编辑-------------
我现在尝试使用单独的配置文件:log4net.config.
它看起来像这样:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="c:\log.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c (line %L) -- %m%n" />
</layout>
</appender>
<root>
<appender-ref ref="FileAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
在我的assemblyInfo.cs中,我写了以下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)
记录到该文件的类如下所示:
ILog myLogger = LogManager.GetLogger(typeof(Form1));
myLogger.Debug("test");
Run Code Online (Sandbox Code Playgroud)
这就像旧版本一样.日志文件条目已经生成,但是当我在运行时更改我的log4net.config时,这些更改不会应用...."Watch = true"应该启用该功能,对吧?
我定义了几个记录器和一个带有几个appender的根节,类似于:
<logger name="X" level="debug"/>
<logger name="Y" level="trace"/>
<logger name="Z" level="warn">
<appender-ref ref="ALERTS-SYSLOG" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
<appender-ref ref="BUFFER"/>
<appender-ref ref="SYSLOG"/>
</root>
Run Code Online (Sandbox Code Playgroud)
我想要完成的是,名为Z的记录器只能访问ALERTS-SYSLOG appender而不是根部分中定义的所有记录器.只有配置在XML文件上才可能吗?
警告显示......
log4j:WARN Continuable parsing error 28 and column 23
log4j:WARN The content of element type "log4j:configuration" must match
"(renderer*,appender*,(category|logger)*,root?,categoryFactory?)".
Run Code Online (Sandbox Code Playgroud)
执行java文件时
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="\n[%-6r] - %m" />
</layout>
</appender>
<category name="se.jayway.ddsteps">
<priority value="info"></priority>
</category>
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="file"
value="D:/workspace_Testing/IdMUnitTests/logs/IdMUnitlog.log" />
<param name="immediateFlush" value="true" />
<param name="threshold" value="debug" />
<param name="append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<root>
<priority value="INFO"></priority>
<appender-ref ref="console" /> …Run Code Online (Sandbox Code Playgroud) 如何将log4j.properties配置为每次运行应用程序时只有一个日志文件.我已经读过你应该在文件名中使用时间戳,但随着时间的推移,每次运行会创建许多文件.
我尝试过DailyRollingFileAppender和RollingFileAppender但是找不到一种方法来为每次运行配置一个日志.不应将日志分成多个日志,也不应截断日志,应保留旧运行的文件.
每个类都有一个静态的org.slf4j.Logger,它有自己的类名:
private static final Logger log = LoggerFactory.getLogger(Foo.class);
Run Code Online (Sandbox Code Playgroud)
这是我当前的log4j.properties
log4j.rootLogger=error, RootAppender, RootErrorAppender
#log4j.logger.com.example=info, qspaBackendAppender, stderr
log4j.logger.com.example=info, qspaBackendAppender
log4j.additivity.com.example=true
#log4j.logger.com.example.util=trace, qspaBackendAppender, stderr
#log4j.additivity.com.example.util=true
log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log
log4j.appender.qspaBackendAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.qspaBackendAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n
log4j.appender.stderr=org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Target=System.err
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern=%-5p %c{1}:%L - %m%n
log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender
log4j.appender.RootAppender.file=logs/root.log
log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RootAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n
log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender
log4j.appender.RootErrorAppender.file=logs/rootError.log
log4j.appender.RootErrorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RootErrorAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n
log4j.appender.RootErrorAppender.threshold=error
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行Kafka-0.8 Log4j appender而我无法做到.我希望我的应用程序通过Log4j appender将日志直接发送到kafka.
这是我的log4j.properties.我找不到任何合适的编码器,所以我只是将其配置为使用默认编码器.(例如,我对这条线进行了评论.)
log4j.rootLogger=INFO, stdout, KAFKA
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.KAFKA=kafka.producer.KafkaLog4jAppender
log4j.appender.KAFKA.layout=org.apache.log4j.PatternLayout
log4j.appender.KAFKA.layout.ConversionPattern=%-5p: %c - %m%n
log4j.appender.KAFKA.BrokerList=hnode01:9092
log4j.appender.KAFKA.Topic=DKTestEvent
#log4j.appender.KAFKA.SerializerClass=kafka.log4j.AppenderStringEncoder
Run Code Online (Sandbox Code Playgroud)
这是我的示例应用程序.
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;
public class HelloWorld {
static Logger logger = Logger.getLogger(HelloWorld.class.getName());
public static void main(String[] args) {
PropertyConfigurator.configure(args[0]);
logger.info("Entering application.");
logger.debug("Debugging!.");
logger.info("Exiting application.");
}
}
Run Code Online (Sandbox Code Playgroud)
我用maven编译.我在我的pom.xml中包含了kafka_2.8.2-0.8.0和log4j_1.2.17
我收到这些错误:
INFO [main] (Logging.scala:67) - Verifying properties
INFO [main] (Logging.scala:67) - Property metadata.broker.list is overridden to hnode01:9092
INFO [main] (Logging.scala:67) - Property serializer.class is overridden …Run Code Online (Sandbox Code Playgroud) Log4j 1.*有一个null appender类,但我找不到log4j中的等价物2.是否有一个?如何在log4j2.xml中配置null appender?
我需要的功能是在配置的日志文件的开头写一个标题行.此外,日志文件应该根据时间模式滚动(我说的是logback 1.0.7).
所以,我正在考虑编写一个Appender - 虽然我不确定它是不是我真正需要的自定义布局.
1)Appender
根据logback的文档,正确的方法是扩展AppenderSkeleton,但那么我将如何将其与RollingFileAppender(以使文件翻转?)相结合?
另一方面,如果我扩展RollingFileAppender,我会覆盖哪种方法来装饰现有的功能?我怎么告诉它只在文件的开头写这个特定的字符串?
2)布局
类似地,该方法似乎正在扩展LayoutBase,并提供实现doLayout(ILoggingEvent event).但同样,我不知道如何装饰行为 - 只是在文件中添加一个新行,而不是破坏其功能(因为我仍然希望其余日志正确显示).
将getFileHeader()在LayoutBase看起来很有希望,但我要如何使用它?是否打算被自定义布局覆盖?(可能是的,因为它是Layout界面的一部分,但那又怎么样?)
谢谢!
我使用RollingFileAppender的log4j 1.2.16,其推出的日志文件,当他们达到一定规模.现在我想每天滚动日志文件,当它们达到一定大小时.因此,每天将有一个或多个日志文件.
例如,
myapp.log myapp-17.12.2013.log myapp-16.12.2012.log myapp-16.12.2012.1.log myapp-16.12.2012.2.log
是否有一个现成的appender,它已经做到了吗?
当我在日期列中设置空值时,我在表中得到"1900-01-01 00:00:00.000"值,我期望该列中为NULL.因为这样在jdbc中正确处理,如果我这样说
preparedStatement.setBindParam(Types.TIMESTAMP, 12, startdate);
Run Code Online (Sandbox Code Playgroud)
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<CustomLevels>
<CustomLevel name="TESTLOG" intLevel="552" />
</CustomLevels>
<Appenders>
<JDBC name="myAppender" tableName="MYTABLE">
<DataSource jndiName="java:MyDataSource" />
<Column name="ID" pattern="%X{ID}" isUnicode="false"/>
<Column name="startdate" pattern="%X{startdate}" isUnicode="false"/>
<Column name="enddate" pattern="%X{enddate}" isUnicode="false"/>
</JDBC>
</Appenders>
<Loggers>
<Root level="trace" includeLocation="false">
<AppenderRef ref="myAppender" level="TESTLOG" />
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
列startdate和enddate的数据类型是datetime
ThreadContext.put("startdate", startdate != null ? startdate.toString() : null);
ThreadContext.put("enddate", a_reportEndDate != null ? enddate.toString() : null);
final Logger LOGGER = LogManager.getLogger();
LOGGER.log(Level.forName("TESTLOG", 552), "");
Run Code Online (Sandbox Code Playgroud)
对于具有空值的String也是如此.