概述
目录
- 前言:
- 一、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单独输出、以及配置单独文件输出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复