如何在客户端服务器程序中集成log4j日志记录?

爱喵

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

我现在有以下几点:

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

}

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

Hotzst

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

根据您在哪里使用记录仪,必须将其定义为静态字段

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

或非静态字段:

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

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

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

通常使用定义类的记录器(取决于日志配置)来定义记录器,作为日志事件(读取日志行)的一部分打印出该类名称,因此可以很容易地追溯到触发该日志事件的类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在apache ignite服务器日志中记录客户端IP地址?

如何在log4j中集成编程配置?

如何抑制冒泡到客户端的EJBException的服务器端日志记录?

如何设计具有客户端信息的服务器端日志记录功能的RESTful服务

如何在客户端/服务器应用程序中区分多个客户端

如何使用此客户端服务器程序?

如何在pyspark中使用log4j配置特定记录器的日志级别?

如何在JAVA中运行服务器-客户端应用程序

如何在 JGrasp for Java 中运行服务器/客户端程序?

如何在身份服务器4中获取客户端的远程IP地址

如何在春季集成中设置TLS服务器以对客户端进行身份验证?

服务器如何在服务器/客户端拓扑中检测客户端电源关闭

如何在客户端更新 Blazor Server 应用程序的服务器端更改?

如何在next.js应用程序中从服务器端获取客户端的IP地址?

如何在客户端中存储Web服务器的多个服务器地址?

有谁知道如何在kurento媒体服务器Java客户端中恢复记录?

如何使用同一log4j记录器为不同的程序包创建不同的日志文件?

如何在Apache或NodeJS服务器上托管Angularjs应用程序或MEAN客户端应用程序?

在服务器上记录客户端JavaScript错误

如何使用JavaScript将日志文件从客户端推送到服务器

如何在UDP无连接客户端中的固定端口上运行客户端程序-Java中的服务器对

log4j不在tomcat7(ubuntu服务器)上写入日志文件

如何在Express,React,Webpack,SSR应用程序中的客户端和服务器之间共享常量

如何在不创建服务器的情况下测试客户端应用程序?

如何在ASP.NET Web应用程序中的服务器和客户端之间进行通信?

如何在Spring MVC应用程序中插入TCP-IP客户端服务器

客户端服务器应用程序如何实现?(服务器端)(询问概念)

无法使用log4javascript将客户端日志发送到服务器(Asp.net Web API)

如何在客户端渲染的React应用中发出服务器端请求?