java - 如何将 log4j 日志记录集成到我的客户端-服务器程序中?

标签 java logging log4j

我是log4j的初学者,我似乎已经了解了基础知识。我的问题是,我将在两台不同的机器上部署我的程序(假设机器 1 上的客户端和机器 2 上的服务器),那么我将如何进行日志记录?

我现在有以下内容:

log4j.属性:

# 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");
    }

}

那么我应该为客户端和服务器使用不同的记录器对象吗?另外,如果我想在客户端上附加相同的文件,我应该使用某种方法传递记录器对象还是应该创建一个新对象?我对此有点困惑,谢谢

最佳答案

最好的方法是在每个需要记录内容的类中定义一个记录器。您可能有一堆没有日志语句的类,因此不需要在那里定义记录器。最好使用定义记录器的类来初始化记录器。

根据您使用记录器的位置,它必须定义为静态字段

public MyClass {
  private static final Logger log = Logger.getLogger(MyClass.class);
}

或非静态字段:

public MyClass {
  private final Logger log = Logger.getLogger(getClass());
}

记录器应始终是私有(private)的,没有任何 getter 方法,因此它只能在类内(或内部类内)使用。

只要所有对象都在同一个 JVM 中运行,为每个类定义一个记录器实例仍然允许您记录到同一个文件或控制台。您还可以为不同的应用程序共享相同的日志配置,但并发文件访问可能会出现问题。我认为最好每个应用程序都有一个专用的日志文件。如果它们不在同一个 JVM 中运行,这将导致两个不同的日志文件,一个用于服务器,一个用于客户端。

使用定义它的类来定义记录器通常(取决于日志配置)会打印出该类名称作为日志事件的一部分(读取日志行),因此可以轻松追踪日志事件在哪个类中被触发。

关于java - 如何将 log4j 日志记录集成到我的客户端-服务器程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32966409/

相关文章:

java - 在 Linux 上交付 Java 软件的最佳方式是什么?

java - 如何使用 BufferedReader.readLine() 方法从输入流中读取 XML 格式的文本?

java - Swing——根据单元格的值设置单元格的颜色

c# - NHibernate 日志记录问题

c++ - 包装在函数中的调试宏的惰性参数评估

Java 8 在一段滑动窗口中计数

java - 将 CookieParam 注释与 Spring MVC Controller 一起使用

properties - 属性文件中的log4j StringToMatch

Tomcat登录webapp和容器?

java - log4j - 指向多个 log4j.properties 文件之一