Please initialize the log4j system properly. While running web service

后端 未结 7 944
半阙折子戏
半阙折子戏 2020-12-04 17:05

Maybe it looks silly to ask this but I am confused. I referred to Configuring Log4j property but it doesn\'t seem to help.

I have written a simple web service HelloW

相关标签:
7条回答
  • 2020-12-04 17:14

    You can configure log4j.properties like above answers, or use org.apache.log4j.BasicConfigurator

    public class FooImpl implements Foo {
    
        private static final Logger LOGGER = Logger.getLogger(FooBar.class);
    
        public Object createObject() {
            BasicConfigurator.configure();
            LOGGER.info("something");
            return new Object();
        }
    }
    

    So under the table, configure do:

      configure() {
        Logger root = Logger.getRootLogger();
        root.addAppender(new ConsoleAppender(
               new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
      }
    
    0 讨论(0)
  • 2020-12-04 17:16

    If the below statment is present in your class then your log4j.properties should be in java source(src) folder , if it is jar executable it should be packed in jar not a seperate file.

    static Logger log = Logger.getLogger(MyClass.class);
    

    Thanks,

    0 讨论(0)
  • 2020-12-04 17:18

    Well, if you had already created the log4j.properties you would add its path to the classpath so it would be found during execution.
    Yes, the thingy will search for this file in the classpath.
    Since you said you looked into axis and didnt find one, I am assuming you dont have a log4j.properties, so here's a crude but complete example.
    Create it somewhere and add to your classpath. Put it for example, in c:/proj/resources/log4j.properties

    In your classpath you simple add .......;c:/proj/resources

    # Root logger option
    log4j.rootLogger=DEBUG, stdout, file
    
    # Redirect log messages to console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
    # Redirect log messages to a log file, support file rolling.
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log
    log4j.appender.file.MaxFileSize=5MB
    log4j.appender.file.MaxBackupIndex=10
    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
    
    0 讨论(0)
  • 2020-12-04 17:19

    Those messages are something tricky, enough so that people created this to make it clearer: https://issues.apache.org/bugzilla/show_bug.cgi?id=25747

    What's tricky about them is that the warnings are written if Log4j can't find its log4j.properties (or log4j.xml) file, but also if the file is fine and dandy but its content is not complete from a configuration point of view.

    The following paragraph is taken from here: http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_9/docs/TROUBLESHOOT.html

    Logging output is written to a target by using an appender. If no appenders are attached to a category nor to any of its ancestors, you will get the following message when trying to log:

    log4j: No appenders could be found for category (some.category.name).
    log4j: Please initialize the log4j system properly.
    

    Log4j does not have a default logging target. It is the user's responsibility to ensure that all categories can inherit an appender. This can be easily achieved by attaching an appender to the root category.

    You can find info on how to configure the root logger (log4j.rootLogger) in the log4j documentation, basically adding something as simple as this at the beginning of the file:

    log4j.rootLogger=debug, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
    

    This should clear those WARN messages you get on startup (make sure you don't already have an appender named stdout; also be carefull of what level you give the root logger, debug will be very verbose and every library in your app will start writing stuff to the console).

    As about the log4j.properties/log4j.xml, I suggest you place this file in /WEB-INF/classes as it is important to have it exposed for different tweaks (activating/deactivating logs, changing log levels etc). You can have it inside a JAR in the classpath also (as you specified in your comment), but it will be enclosed in the archive (hopefully in the right place inside the archive) and won't be as easy to handle as if it were in /WEB-INF/classes.

    0 讨论(0)
  • 2020-12-04 17:29

    If you are using Logger.getLogger(ClassName.class) then place your log4j.properties file in your class path:

    yourproject/javaresoures/src/log4j.properties (Put inside src folder)
    
    0 讨论(0)
  • 2020-12-04 17:30

    Warning No appenders could be found for logger means that you're using log4j logging system, but you haven't added any Appenders (such as FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, etc.) into your configuration file or the configuration file is missing.

    There are three ways to configure log4j: with a properties file (log4j.properties), with an XML file and through Java code (rootLogger.addAppender(new NullAppender());).

    If you've property file present (e.g. when installing Solr), you need to place this file within your classpath directory.

    classpath

    Here are some command suggestions how to determine your classpath value:

    $ echo $CLASSPATH
    $ ps wuax | grep -i classpath
    $ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf
    

    or from Java: System.getProperty("java.class.path").

    Tomcat

    If you're using Tomcat, you may place your log4j.properties into: /usr/share/tomcat?/lib/ or /var/lib/tomcat?/webapps/*/WEB-INF/lib/ folder.

    Solr

    For the reference, Solr log4j.properties looks like:

    #  Logging level
    solr.log=logs/
    log4j.rootLogger=INFO, file, CONSOLE
    
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n
    
    #- size rotation with log cleanup.
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.MaxFileSize=4MB
    log4j.appender.file.MaxBackupIndex=9
    
    #- File to log to and log format
    log4j.appender.file.File=${solr.log}/solr.log
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
    
    log4j.logger.org.apache.zookeeper=WARN
    log4j.logger.org.apache.hadoop=WARN
    
    # set to INFO to enable infostream log messages
    log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
    
    0 讨论(0)
提交回复
热议问题