I have reviewed other related questions but have not found a answer for this. It seems the javadocs at https://logging.apache.org/log4j/extras/apidocs/org/apache/log4j/rolling/RollingFileAppender.html are incorrect and/or incomplete. At least the element looks to have a spurious double quote mark in it.
I am starting up in debug mode and it all looks OK. Yet, I cannot find the log file. We have other custom appenders that are working fine but I am trying to replace them with the OTB solution.
Here is my config:
<appender name="file" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="threshold" value="debug" />
<rollingPolicy name="file" class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="logs/My_Server.%d{yyyy-MM-dd-hh}.log"/>
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %r [%t] %-5p %c{1} %x - %m%n"/>
</layout>
</appender>
<appender name="ASYNCfile" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<param name="blocking" value="false"/>
<appender-ref ref="file"/>
</appender>
<root>
<priority value="INFO"/>
<appender-ref ref="ASYNCfile"/>
<appender-ref ref="console"/>
</root>
And the debug console:
log4j: Attaching appender named [file] to appender named [ASYNCfile].
log4j: Class name: [org.apache.log4j.rolling.RollingFileAppender]
log4j: Setting property [threshold] to [DEBUG].
log4j: Setting property [fileNamePattern] to [logs/My_Server.%d{yyyy-MM-dd-hh}.log].
log4j: Parsing layout of class: "org.apache.log4j.PatternLayout"
log4j: Setting property [conversionPattern] to [%d{ISO8601} %r [%t] %-5p %c{1} %x - %m%n].
log4j: setFile called: logs/My_Server.2017-07-17-05.log, true
log4j: setFile ended
I don't see any errors related to this in the console ouput - there is just no file to be found.
Related
I have the following log4j configuration:
<appender name="MYCONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="INFO"/>
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601}|%-5p|MYAPP|%t|%C{1}.%M(%L)|%m%n"/>
</layout>
</appender>
<appender name="MYFILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${jboss.server.log.dir}/myapp.log"/>
<param name="Append" value="true"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601}|%-5p|MYAPP|%t|%C{1}.%M(%L)|%m%n"/>
</layout>
</appender>
In the Eclipse console, every log line produced by this configuration is followed by a completely blank line:
12:46:27,289 INFO [stdout] 2017-01-25 12:46:27,289|INFO|MYAPP|something
12:46:27,289 INFO [stdout] 2017-01-25 12:46:27,289|INFO|MYAPP|something else
This happens only with logs generated by MYCONSOLE, all other logs (such as the internal JBoss's ones) don't have blank lines.
Also, in the MYFILE log file, the logs are the same but the blank lines are not there.
What could be the reason?
I was able to get rid of the extra lines by using \n instead of %n.
The reason of the strange behaviour of %n is still not clear to me.
Getting same to me when I use consoleAppader for audit logger
log4j.appender.audit=org.apache.log4j.ConsoleAppender
log4j.appender.audit.layout=org.apache.log4j.PatternLayout
log4j.appender.audit.Target=System.out
log4j.appender.audit.ConversionPattern=%d{ISO8601}|%t|%m%n
The logs dumping on console are empty/blank lines.
If I remove I can get rid of empty lines, I am missing actual data too.
Would appreciate any pointers
I have a log4j configuration file that looks like:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="false">
<appender name="consoleAppender"
class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<appender name="fileAppender"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="INFO" />
<param name="File" value="/var/output/logs/application.log"/>
<param name="DatePattern" value=".yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n %-5p %m%n"/>
</layout>
</appender>
<logger name="connect.testJava" additivity="false" >
<level value="DEBUG" />
<appender-ref ref="consoleAppender"/>
<appender-ref ref="fileAppender"/>
</logger>
</log4j:configuration>
I wanted to basically create logs with the format application.log like application2013-06-12 12:12:00.log or something like that. The above configuration does not seem to be doing that. Can someone please help me out and tell me what I might be doing wrong? I am just about a couple of hours into log4j, so sorry if this question sounds too naive.
Yes it does. Just wait till midnight and a new file will be created. The day's file will remain application.log
I have got the following problem: I want to monitor the execution time of some low-performance methods by using perf4j #Profiled annotation and log4j.
The problem is the monitoring log file is empty and looks like this:
Performance Statistics 2013-07-17 18:07:50 - 2013-07-17 18:08:00
Tag Avg(ms) Min Max Std Dev Count
Performance Statistics 2013-07-17 18:08:00 - 2013-07-17 18:08:10
Tag Avg(ms) Min Max Std Dev Count
The log4j.xml is contained in projectRoot/conf/exp directory and looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="logfile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./logs/exp-log.txt"/>
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p %d{HH:mm:ss.SSS} %c %m%n"/>
</layout>
</appender>
<appender name="CoalescingStatistics"
class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
<param name="TimeSlice" value="10000"/>
<appender-ref ref="fileAppender"/>
<appender-ref ref="graphExecutionTimes"/>
<appender-ref ref="graphExecutionTPS"/>
</appender>
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="./logs/perfStats.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
<appender name="graphExecutionTimes"
class="org.perf4j.log4j.GraphingStatisticsAppender">
<!-- Possible GraphTypes are Mean, Min, Max, StdDev, Count and TPS -->
<param name="GraphType" value="Mean"/>
<!-- The tags of the timed execution blocks to graph are specified here -->
<param name="TagNamesToGraph" value="firstBlock,secondBlock"/>
<appender-ref ref="graphsFileAppender"/>
</appender>
<appender name="graphExecutionTPS"
class="org.perf4j.log4j.GraphingStatisticsAppender">
<param name="GraphType" value="TPS"/>
<param name="TagNamesToGraph" value="firstBlock,secondBlock"/>
<appender-ref ref="graphsFileAppender"/>
</appender>
<appender name="graphsFileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="./logs/perfGraphs.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
<logger name="org.perf4j.TimingLogger" additivity="false">
<level value="INFO"/>
<appender-ref ref="CoalescingStatistics"/>
</logger>
<logger name="sui">
<level value="debug"/>
</logger>
<root>
<priority value="debug"/>
<appender-ref ref="logfile"/>
<appender-ref ref="stdout"/>
</root>
</log4j:configuration>
I have got the following annotations in my sources:
#Profiled(tag = "exportRecsForAccount")
protected void exportRecsForAccount(NetSuiteAcctInfo acctInfo) {
#Profiled(tag = "exportRecsForEachAccount")
protected boolean exportRecsForEachAccount() throws QueueManagerException, CriticalDBConnectionFailed {
Besides that, I have got the aop.xml located in projectRoot/recources/META-INF. Its content is the following:
<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<aspects>
<aspect name="org.perf4j.log4j.aop.TimingAspect"/>
</aspects>
<weaver options="-verbose -showWeaveInfo">
<include within="comp.sui.ExportService"/>
</weaver>
</aspectj>
where comp.sui.ExportService is a link to the source code class.
So the question is what am I doing wrong? When I use StopWatches stamps everything is all right, but with #Profiled annotations seems nothing works.
Try:
<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<aspects>
<aspect name="org.perf4j.log4j.aop.TimingAspect"/>
</aspects>
<weaver options="-verbose -showWeaveInfo">
<include within="comp.sui.ExportService"/>
<!-- Weave in perf4j aspects for Aspectj 1.6.7+ -->
<include within="org.perf4j.slf4j.aop.*"/>
<include within="org.perf4j.aop.*"/>
</weaver>
</aspectj>
I'm using Log4J for logging in SBT. In a configuration file, I've defined the TRACE level for the root node. When I run the project (sbt run) all debug output is displayed correctly. But when I run the tests (sbt test), no output at all is generated. I need to insert the class into the configuration to see the output.
The test are written in a JUnit style. Executing the tests with Eclipse shows all Log4J Output. So, it seems to be an issue with SBT or scalatest.
Log4J Configuration:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%-5r [%-5p] %c: %M - %m%n"/>
</layout>
</appender>
<appender name="asyncApp" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="fileApp"/>
</appender>
<appender name="fileApp" class="org.apache.log4j.FileAppender">
<param name="File" value="testlog_Compiler"/>
<param name="Append" value="true" />
<param name="Threshold" value="ALL"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d [%-5p] %c: %M - %m%n"/>
</layout>
</appender>
<appender name="fileAppTest" class="org.apache.log4j.FileAppender">
<param name="File" value="testlog_Tests"/>
<param name="Append" value="true" />
<param name="Threshold" value="ALL"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d [%-5p] %c: %M - %m%n"/>
</layout>
</appender>
<logger name="main.Main$" additivity="true">
<level value="INFO" />
</logger>
<!--
<logger name="compile.Compiler" additivity="true">
<level value="DEBUG" />
</logger>
-->
<logger name="test" additivity="false">
<level value="TRACE" />
<appender-ref ref="stdout"/>
<appender-ref ref="fileAppTest"/>
</logger>
<root>
<priority value="TRACE"/>
<appender-ref ref="asyncApp"/>
<appender-ref ref="stdout"/>
</root>
</log4j:configuration>
When I use this version of the config file, the tests of compile.Compiler don't generate any log output unless I uncomment its node in the Log4J config. In the SBT configuration file, these dependencies are defined for compile.Compiler: (This is just a minimal example.)
class Comp2011ParentProject(info: ProjectInfo) extends DefaultProject(info) {
val compiler = project("compile", "compile", new Compile(_))
class compiler(info: ProjectInfo) extends DefaultProject(info) with Eclipsify {
val scalatest = "org.scalatest" % "scalatest_2.9.0" % "1.6.1"
val junitInterface = "com.novocode" % "junit-interface" % "0.6" % "test->default"
val log4j = "log4j" % "log4j" % "1.2.16"
val log4jExtras = "log4j" % "apache-log4j-extras" % "1.1"
}
}
Does anyone have a clue why this happens and how to stop it?
(Unfortunately I lost my account which posted this question. :-( But this is also some kind of answer.)
Further investigations showed that at some point in code the level for the compile.Compiler logger was manually set to INFO. When I delete this statement, everything works fine.
The surprising fact about this is that setting the level in one test also causes all the following tests to adopt that logging level. This was hard to understand because I thought the configuration file was reloaded with every new test.
However, after some documentation surfing, I found out that the actual configuration is not reset when loading a configuration file. To have this behavior a BasicConfigurator.resetConfiguration() must be executed before loading the configuration. With this, everything works as expected.
Trying to use a pattern for filename in config such as:
<appender name="FileAppender" class="org.apache.log4j.FileAppender">
<param name="File" class="org.apache.log4j.pattern.FileDatePatternConverter" value="logs/App-%d{yyyy-MM-dd_HH-mm-ss}.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p(%c{1}) %d{yyyy-MM-dd HH:mm:ss.SSS}: %m%n" />
</layout>
</appender>
This does not what work. What is correct syntax?