我是log4j的初學者,我似乎已經理解了基礎知識。我的問題是,我將在2臺不同的機器上部署我的程序(機器1上的客戶機和機器2上的服務器可以說),那麼我將如何進行日誌記錄?如何在客戶端服務器程序中集成log4j日誌記錄?
我已在現在以下:
log4j.properties:
# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
# Set the name of the file
log4j.appender.FILE.File=log.out
# 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=true
# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
log4jTest.java:
包ch.ethz.rama.asl.logger;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class log4jTest {
static Logger log = Logger.getLogger(ch.ethz.rama.asl.client.ClientInstance.class);
public static void main(String args[]) throws FileNotFoundException, IOException{
Properties props = new Properties();
props.load(new FileInputStream("/Users/ramapriyasridharan/Documents/asl_v1/ClientServerNio/bin/log4j.properties"));
PropertyConfigurator.configure(props);
log.debug("debug");
log.info("info");
}
}
所以我應該爲客戶端和服務器有不同的記錄器對象?另外如果我想在客戶端追加相同的文件,我應該使用某種方法傳遞記錄器對象,還是應該創建一個新對象?林有點困惑這個,謝謝
Logger對象log是每個java類定義的。如果客戶端和服務器都可以訪問相同的文件系統,則可以對雙方使用相同的配置,因此可以讓它們登錄到同一個文件中。如果服務器和客戶端在同一個JVM中運行,您也可以登錄到同一個控制檯。然而,正如服務器和客戶端通常指示兩臺物理上不同的機器一樣,您應該在機器上本地登錄不同的日誌文件。 – hotzst
@hotzst我的客戶端和服務器都有很多類,因此對於每個類我都應該有一個單獨的記錄器?這意味着我將擁有相同數量的客戶端/服務器類和記錄器類? – LoveMeow
是的,單獨的記錄器對象並不意味着不同的記錄上下文。在代碼中創建一個記錄器將創建一個輸出,該輸出包含記錄器所屬類的名稱,因此在日誌文件中可以很容易地區分哪個記錄行來自哪個類。 – hotzst