Problem in addAppender() method in Log4j API - java

Hi I'm using log4j api for logging purpose. When I use the following code to append to the appender, it's showing "addAppender() is undefined for the type Logger" error
FileAppender myAppender = new FileAppender(new PatternLayout(),"output.log");
Logger.getLogger(ConfigFileReader.class.getName()).addAppender(myAppender);
Can anyone tell me what should I do to debug this error?

Are you sure that you are importing the correct Logger class? A common error is to import java.util.Logger instead of the Logger from the log4j package.

Related

Log4j2 no appenders could be found

After migrating from log4j v1.2 to log4j2, I have encountered some issues I am not sure how to solve.
I believe I have managed to change my xml-configuration and the logger initialization in the class files I have, but the IDE tells me that No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies)
It shouldn't be necessary to add a logger to classes/ packages I haven't created right? Maybe I am just missing the big picture here, but I hope you can guide me.
Thanks in regards
You use <AppenderRef ref="File"/> but appender File is not defined.
If you want to log everything to console, just change File to Console.
If you want to log to file, define File appender.

Log4j - disabling logs for a package

How do I disable logs for a specific package when I manually create the Appenders in a Java Class.I know that in the properties file,specifying log4j.logger.org.springframework=OFF would disable logs coming from the spring framework package.But I am not sure as to how this can be done from a Java class.
Thanks
How about:
Logger logger = Logger.getLogger(this.getClass());
logger.setLevel(Level.OFF);
For a specific package (instead of a specific class):
Logger logger = Logger.getLogger("my.package.name");
logger.setLevel(Level.OFF);

java mybatis isTraceEnabled()Z error

While printing mybatis SQL statements on console I am getting this error:
java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled()Z
I use log4j which is supported by mybatis.
My log4j.properties file:
### Global logging configuration
log4j.rootLogger=INFO, stdout
log4j.logger.com.app.mybatis.dao=stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
Strange thing is that if I specify a class to be logged, for example
log4j.logger.com.app.mybatis.dao.MyClass=stdout
it works fine but not for the package. Any idea of what would be causing this?
You need to upgrade the log4j to the version 1.2.12+
The method org.apache.log4j.Logger.isTraceEnabled(), including org.apache.log4j.Level.TRACE was added since version 1.2.12
* Currently, the latest version is 1.2.17
I solved the problem by using
org.apache.ibatis.logging.LogFactory.useCustomLogging
method and giving a parameter as a custom logging class that extends Log4jImpl class. I overrode isTraceEnabled method. So error giving method would not be called anymore.

How to handle log4j no appenders error

Whenever I debug my code in Netbeans this appears:
log4j:WARN No appenders could be found for logger (org.apache.pdfbox.pdfparser.PDFObjectStreamParser).
log4j:WARN Please initialize the log4j system properly.
Why is this? Is this important?
Why is this?
The reason why you see this message is that your log4j configuration file(i.e. log4j.xml or log4j.properties) is NOT found in the classpath. Placing the log4j configuration file in the applications classpath should solve the issue.
is this important?
Depends on requirement, if you want messages logged to a file with defined levels, then yes you need to fix this warning. Otherwise you may ignore.
For setting Log4j in runtime, do this:
java -Dlog4j.configuration=file:///D:/crawler4j-3.5/log4j.properties -jar newCrawlerV0.1.jar

log4j warning issue - apache commons

I'm using apache commons library and log4j.
I have an xml configuration file and a log4j.properties files. I want to specify my log4j properties path inside my xml configuration file.
To load my settings i do:
//Loading my xml file
this.config = new XMLConfiguration(this.xmlFileName);
At this moment the following warnings are raised:
log4j:WARN No appenders could be found for logger (org.apache.commons.configuration.ConfigurationUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
However i haven't yet called any log4j object. Once i have read the xml file i can successfully work with my log4j instance.
Is there any way to remove those warnings?
Check if the log4j.properties file is in the classpath
This link might be useful:
http://www.coderanch.com/t/63230/open-source/log-log-WARN-No-appenders
Log4J outputs this error when a logger is created, but no appender(s) is(are) defined.
In practice this error occurs when a logger is created before log4j is initialized.
You say you haven't called any log4j object. But in the error message you see that org.apache.commons.configuration.ConfigurationUtils creates a logger object (see line 66).
You could turn it off before initialization, see How to turn off log4j warnings?
Logger.getRootLogger().setLevel(Level.OFF);
There should be no need to turn it on again since the initialization sets normally the log level of the root logger.
You should at least set the appender and the logger level for the root logger in the loaded log4j configuration file. Otherwise , you will see this warning message.
Example of setting the appender and logger level for the root logger:
#Set root logger 's level and its appender to an appender called CONSOLE which is defined below.
log4j.rootLogger=DEBUG, CONSOLE
#Set the behavior of the CONSOLE appender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
I resolve my issue with this workaround:
//Disable log level
Logger.getRootLogger().setLevel(Level.OFF);
Now i can read my xml configuration file without WARNINGS.
After set log level:
Logger.getRootLogger().setLevel(Level.INFO);

Categories