Ich frage mich, wie der folgende Code konvertiert werden kann, um diese Zeilen in eine Textdatei und nicht in die Standardausgabe auszugeben:
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");
}
}
Die Eigenschaftendatei lautet:
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
Vielen Dank.
Ändern Sie den ConsoleAppender in einen FileAppender.
Ich finde org.Apache.log4j.RollingFileAppender
, um nützlich zu sein . Wenn Sie dies verwenden, müssen Sie Sie müssen eine Eigenschaft für den Dateinamen hinzufügen, und Kann auch maxFileSize festlegen .____ Hier ist ein Beispiel (fügen Sie diese in die Datei log4j.properties ein):
log4j.appender.NotConsole=org.Apache.log4j.RollingFileAppender
log4j.appender.NotConsole.fileName=/some/path/to/a/fileName.log
log4j.appender.NotConsole.maxFileSize=20MB
Es gibt andere Appender .DailyRollingFileAppender
Rollen basierend auf der Zeit .FileAppender
rollt nicht . Wenn Sie die RollingFileAppender
verwenden, Müssen Sie einen guten Wert für maxFileSize und .__ schätzen. Geben Sie die Größe dann zu einem späteren Zeitpunkt an, wenn Probleme auftreten.
Verwenden Sie kurz FileAppender anstelle von ConsoleAppender.
Hier ist ein einfaches Konfigurationsbeispiel. Es konfiguriert zusätzlich das Layout. Sie können es für den ersten Ansatz weglassen.
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{[email protected]:mm:ss} %-5p (%13F:%L) %3x - %m%n
Folgendes wäre hilfreich:
Klasse mit Hauptmethode
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 Datei
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
folgende Konfiguration sollte ebenfalls funktionieren
log4j.appender.stdout = org.Apache.log4j.FileAppender
log4j.appender.stdout.fileName = error.log
log4j.appender.stdout.layout = org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =% d {ABSOLUTE}% 5p % c {1}:% L -% m% n
in 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