我是靠谱客的博主 雪白黑猫,最近开发中收集的这篇文章主要介绍Log4J配置Syslog单独输出、以及配置单独文件输出,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

      • 前言:
      • 一、Log4j配置Syslog单独输出:
      • 二、Log4J配置单独文件输出:

前言:

Log4J在项目中会经常使用,大部分的logger会配置到rootLogger中,这种情况下子Logger 会继承 父Logger 的appender,也就是说子Logger 会在 父Logger 的appender里输出。
但在开发的过程中我们经常会遇到希望Log单独输出到某一个日志文件。这篇文章将介绍Log4J如何配置Syslog发送日志到某个服务器,以及Log4J如何配置单独文件输出。

一、Log4j配置Syslog单独输出:

配置单独输出,不需要将Logger加入到rootLogger中,并且需要在logger的配置中添加一句:

#syslog是logger的名字
log4j.additivity.logName=false

log4j.additivity是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。设为false,子logger将不会继承rootLogger的输出源。

完整的配置:

log4j.logger.syslog=INFO,syslog
log4j.additivity.syslog=false
log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog.SyslogHost=127.0.0.1
log4j.appender.syslog.Port=514
#log.appender.logFile.encoding=UTF-8 
log4j.appender.syslog.Facility=LOCAL1
log4j.appender.syslog.header=true
log4j.appender.syslog.Threshold=INFO
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern=%m%n
log4j.appender.syslog.Encoding=UTF-8

这里将Syslog服务器的IP和端口号写死。但在开发中更为常见的是,Syslog服务器的IP和端口号是自动获取的,所以下面的写法更为实用。

log4j.logger.syslog=INFO,syslog
log4j.additivity.syslog=false
#log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog=org.apache.log4j.MYSyslogAppender
#log4j.appender.syslog.SyslogHost=127.0.0.1
#log4j.appender.syslog.Port=
#log.appender.logFile.encoding=UTF-8 
log4j.appender.syslog.Facility=LOCAL1
log4j.appender.syslog.header=true
log4j.appender.syslog.Threshold=INFO
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern=%m%n
log4j.appender.syslog.Encoding=UTF-8

这里的org.apache.log4j.ZFSyslogAppenderSyslog4jAppender,在里面动态获取Syslog服务器的IP和端口号。

注意: 此时 log4j.appender.syslog=你重写类的路径

import org.productivity.java.syslog4j.impl.log4j.Syslog4jAppender;

public class MYSyslogAppender extends  Syslog4jAppender{
	
	public void setSyslogHost(String syslogHost) {
		super.setHost(syslogHost);
	}
	
	public void setPort(String syslogHost) {
		super.setPort(syslogHost);
		
	}
	public MYSyslogAppender(){
		String hostIP = 动态获取代码(例如从配置文件中获取);
		String portstr = 动态获取代码(例如从配置文件中获取);
		this.setHost(hostIP);
		this.setPort(portstr);
	}

}

在代码中使用时这个logger只需要在代码中引入:

private static Logger sysLogger = Logger.getLogger("syslog");

//使用时
sysLogger.info("向Syslog服务器发送的信息");

这样,就可以 自动向Syslog服务器发送内容。

二、Log4J配置单独文件输出:

单独文件输出同样需要设置:

log4j.additivity.logName=false

这里贴出一个例子:

# MSY
log4j.logger.zflog=INFO,zflog

log4j.appender.zflog=org.apache.log4j.RollingFileAppender
#log path
log4j.appender.zflog.File=./log/zflog.log
log4j.appender.zflog.MaxFileSize =100MB
log4j.additivity.zflog=false
log4j.appender.zflog.Append=true
log4j.appender.zflog.header=true
log4j.appender.zflog.Threshold=INFO
log4j.appender.zflog.layout=org.apache.log4j.PatternLayout
log4j.appender.zflog.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
log4j.appender.zflog.Encoding=UTF-8

同样使用此Logger也需要在代码中引入:

private static Logger zflog = Logger.getLogger("zflog");

zflog.info("想要记录的内容");

内容就会记录在你配置的logger日志中。

OK,看完点赞!

最后

以上就是雪白黑猫为你收集整理的Log4J配置Syslog单独输出、以及配置单独文件输出的全部内容,希望文章能够帮你解决Log4J配置Syslog单独输出、以及配置单独文件输出所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部