# Log4j `SocketAppender`和套接字服务器示例

> 原文： [https://howtodoinjava.com/log4j/log4j-socketappender-and-socket-server-example/](https://howtodoinjava.com/log4j/log4j-socketappender-and-socket-server-example/)

[Log4j](//howtodoinjava.com/category/frameworks/log4j/ "log4j tutorials") 是一个简单而灵活的日志记录框架。 日志记录为开发人员提供了有关应用故障的详细上下文。 使用 log4j 可以在运行时启用日志记录，而无需修改应用二进制文件。

Log4j 带有多个选项来格式化框架创建的日志文件。 它也可以创建简单的日志文件，html 日志文件或 xml 日志文件。

这篇文章中，我将展示用于配置 log4j 以在网络位置的简单套接字服务器（打包在`log4j.jar`本身中）中记录日志事件的示例代码。

**步骤 1）创建一个 Maven Java 项目并更新 log4j 依赖项**

请遵循与[**使用 maven 配置 log4j**](//howtodoinjava.com/log4j/how-to-configure-log4j-using-maven/ "How to configure log4j using maven") 有关的步骤。

**步骤 2）在`log4j-server.properties`文件**中配置套接字服务器日志记录配置

很少有人知道 log4j 具有与功能齐全的[**套接字服务器**](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketServer.html "Log4j Socket Server")捆绑在一起的功能，该功能可用于监听网络连接并记录从各个网络节点和位置发送到服务器的日志事件。

要配置套接字服务器，请在给定的项目根文件夹中创建一个`log4j-server.properties`文件。 此文件配置接收到的日志事件的记录方式和记录位置。

```java
#Define a narrow log category. A category like debug will produce some extra logs also from server itself
log4j.rootLogger=ERROR, file

#Define how the socket server should store the log events
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=application-error.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n
```

**步骤 3）将`log4j.properties`配置为使用`SocketAppender`** 

在此步骤中，让我们指定远程套接字服务器的主机名（即 IP 地址）和它正在监听日志事件的端口。 我们还将日志附加器指定为`SocketAppender`，它能够将日志事件发送到网络上连接的套接字。

```java
#Define the log4j configuration for local application
log4j.rootLogger=ERROR, server

#We will use socket appender
log4j.appender.server=org.apache.log4j.net.SocketAppender

#Port where socket server will be listening for the log events
log4j.appender.server.Port=4712

#Host name or IP address of socket server
log4j.appender.server.RemoteHost=localhost

#Define any connection delay before attempting to reconnect
log4j.appender.server.ReconnectionDelay=10000
```

**步骤 4）启动简单套接字服务器**

要启动服务器，请在命令提示符下键入以下命令，服务器将启动并运行：

```java
java -classpath c:Users.m2repositorylog4jlog4j1.2.17log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer
4712 log4j-server.properties
```

请不要忘记在系统中指定 log4j.jar 的正确路径。

**步骤 5）测试应用**

编写一个配置`log4j.properties`并发送日志事件的测试类。 我写了这样的测试类，如下所示：

```java
package com.howtodoinjava;

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

public class Log4jSocketAppenderExample
{
	static Logger logger = Logger.getLogger(Log4jSocketAppenderExample.class);
	public static void main(String[] args)
	{
		//PropertiesConfigurator is used to configure logger from properties file
		PropertyConfigurator.configure("log4j.properties");

		//These logs will be sent to socket server as configured in log4j.xml
		logger.error("Log4j socket appender test run successfully!!");
	}
}

```

上面的代码将在`application.log`文件中创建一个日志条目，如下所示：

```java
[2013-04-09 09:00:34,044] [main] [Log4j socket appender test run successfully!!]
```

**祝您学习愉快！**