Java log4j:如何使用SocketAppender?

Java log4j:如何使用SocketAppender?,java,log4j,appender,Java,Log4j,Appender,我有一个关于如何使用SocketAppender的教程(我需要它来收集分布式系统中的日志),但我对log4j是新手,我不知道如何使用该示例代码 可能我应该有log4j-server.properties,比如: log4j.appender.SERVER=org.apache.log4j.net.SocketAppender log4j.appender.SA.Port=4712 log4j.appender.SA.RemoteHost=loghost log4j.appender.SA.Rec

我有一个关于如何使用SocketAppender的教程(我需要它来收集分布式系统中的日志),但我对log4j是新手,我不知道如何使用该示例代码

可能我应该有log4j-server.properties,比如:

log4j.appender.SERVER=org.apache.log4j.net.SocketAppender
log4j.appender.SA.Port=4712
log4j.appender.SA.RemoteHost=loghost
log4j.appender.SA.ReconnectionDelay=10000
但我仍然不知道如何启动服务器(如何使用这条线路)

org.apache.log4j.net.SimpleSocketServer 4712 log4j server.properties

最重要的是:
在哪里\如何查看日志?

您可以使用

java -classpath log4j.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties
SimpleSocketServer
接收远程
SocketAppender
发送到指定端口号的日志事件,并根据您在
log4j server.properties
中提供的配置,将这些事件记录为本地生成的事件。您可以自行配置相关的控制台/文件/滚动文件附加器,并将它们附加到相关的日志记录器,就像您在原始流程中直接记录日志一样,而不是通过网络套接字管道记录日志事件。例如,如果您当前正在使用以下内容创建本地日志文件:

log4j.rootLogger=DEBUG, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logfile.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
然后您可以更改它,以便发送端
log4j.properties
简单地说

log4j.rootLogger=DEBUG, server
log4j.appender.server=org.apache.log4j.net.SocketAppender
log4j.appender.server.Port=4712
log4j.appender.server.RemoteHost=loghost
log4j.appender.server.ReconnectionDelay=10000
服务器端
log4j server.properties
包含以前在发送端的定义:

log4j.rootLogger=DEBUG, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logfile.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

特别要注意的是,在发送端的
SocketAppender
上指定布局没有意义-通过网络的是整个日志事件对象,接收端负责进行布局。

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

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


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

这些被称为命令行参数。请注意,您不应该在某些log4j版本中使用该功能(“这会影响log4j版本1.2到1.2.17”):非常感谢,它可以工作:),但我还有一个问题。现在我得到了一些额外的日志,比如
[2012-08-01 15:20:39950][main][Connected to client at/127.0.0.1][2012-08-01 15:20:39950][main][Starting new socket node.][2012-08-01 15:20:39950][main][main][Waiting to accept new client.]
我应该做些什么来避免记录这些日志?这些看起来像是socket server本身生成的消息。您必须稍微改进一下日志记录配置。根据这些额外消息的级别,可能足以将服务器端根日志记录器设置为错误而不是调试,然后添加
log4j.logger.com.example=DEBUG
或适合发送端正在登录的日志记录器的任何内容。对log4j 2的支持如何?服务器能否识别客户端,例如。,不同的客户端到不同的文件,或者为每个日志事件添加客户端ip?@Leon不是标准的,但是
SimpleSocketServer
是非常简单的代码,因此在本地记录事件之前,不难修改它以将客户端的ip地址添加到MDC,然后您可以在appender模式中引用该MDC密钥