cómo escribir en un archivo de texto usando to log4j?


Me pregunto cómo convertir el siguiente código para generar esas líneas en un archivo de texto, y no en una salida estándar:

import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator;

public class HelloWorld {

    static final Logger logger = Logger.getLogger(HelloWorld.class);

    public static void main(String[] args) {
        PropertyConfigurator.configure("log4j.properties");
        logger.debug("Sample debug message");
        logger.info("Sample info message");
        logger.warn("Sample warn message");
        logger.error("Sample error message");
        logger.fatal("Sample fatal message");
    }
}

El archivo de propiedades es:

log4j.rootLogger=DEBUG, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=%m%n

Gracias.

Author: naXa, 2010-12-17

5 answers

Cambie el ConsoleAppender a un FileAppender. Un archivo appender que me parece útil es org.apache.log4j.RollingFileAppender. Tendrá que agregar una propiedad para el nombre del archivo y puede que desee establecer el maxFileSize también. Aquí hay un ejemplo (póngalos en el archivo log4j.properties):

log4j.appender.NotConsole=org.apache.log4j.RollingFileAppender
log4j.appender.NotConsole.fileName=/some/path/to/a/fileName.log
log4j.appender.NotConsole.maxFileSize=20MB

Hay otros anexos. DailyRollingFileAppender rollos basados en el tiempo. FileAppender no rueda. Si utiliza el RollingFileAppender, tendrá que hacer una conjetura en cuanto a un buen valor para maxFileSize y luego abordar la tamaño en una fecha futura si está causando problemas.

 30
Author: DwB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-06 15:03:12

Utilice en breve FileAppender en lugar de ConsoleAppender.

Aquí hay un ejemplo simple de configuración. Además configura el diseño. Puedes omitirlo para el primer acercamiento.

log4j.appender.F=org.apache.log4j.FileAppender
log4j.appender.F.File=mylog.log
log4j.appender.F.layout=org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - %m%n
 6
Author: AlexR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-17 21:12:33

La siguiente configuración también debería funcionar

Dirigir los mensajes de registro a stdout # # #

Log4j. appender.stdout = org.apache.log4j.FileAppender
log4j. appender.stdout.fileName = error.log
log4j. appender.stdout.layout = org.apache.log4j.PatternLayout
log4j. appender.stdout.diseño.ConversionPattern = %d{ABSOLUTO} %5p %c{1}:%L - % m % n

 1
Author: Muhammad Abid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-07 20:53:50

En log4j. properties

# Define the root logger with file appender
log4j.logger.App = DEBUG ,CA

#set file text
log4j.appender.CA = org.apache.log4j.RollingFileAppender
log4j.appender.CA.File = D:\\database.log
log4j.appender.CA.maxFileSize = 20MB
log4j.appender.CA.MaxBackupIndex=10
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
 0
Author: Thailand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-18 11:05:06

Lo siguiente sería útil:

Clase que contiene el método principal

    package abc;

    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;

    public class ClassOne {
        static Logger logger = Logger.getLogger(ClassOne.class);

        public static void main(String[] args) {
             PropertyConfigurator.configure("log4j.info"); //log4j.info file should be in the class path(same location as ClassOne.class)

             logger.info("Program started.... "); //Whenever you want to write something to the log text file use logger.info("Log Message")

        }
    }

Log4j.info file

   log4j.rootLogger=INFO, FILE

   # Define the file appender
   log4j.appender.FILE=org.apache.log4j.FileAppender // Replacing ConsoleAppender with FileAppender gives text file logging

   # Set the name of the file
   log4j.appender.FILE.File=src/abc/log.out //Here you can specify either absolute or relative path

   # Set the immediate flush to true (default)
   log4j.appender.FILE.ImmediateFlush=true

   # Set the threshold to debug mode
   log4j.appender.FILE.Threshold=debug

   # Set the append to false, overwrite
   log4j.appender.FILE.Append=false

   # Define the layout for file appender
   log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
   log4j.appender.FILE.layout.conversionPattern=%d %m%n
 0
Author: harshainfo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-04 17:55:46