1. 客户端的配置
1.1jar包导入
本地要输出日志的项目中引用log4j的jar包,最好用最新的版本,下载地址:
http://logging.apache.org/log4j/1.2/download.html
本文配置运用的最新的1.2.17版本;将jar包加入项目中即可
1.2 配置文件
客户端要有一个可以运行的java项目或者web项目,可以打印输出日志。在项目的配置文件包中新建一个log4j.properties,配置如下:
log4j.appender.socket=org.apache.log4j.net.SocketAppender #服务器ip log4j.appender.socket.RemoteHost=192.168.1.111 #日志系统传输的端口号 log4j.appender.socket.Port=4712 log4j.appender.socket.LocationInfo=true # patteren log4j.appender.socket.layout=org.apache.log4j.PatternLayout log4j.appender.socket.layout.ConversionPattern=[%-5p]%d{yyyy-MM-ddHH\:mm\:ss,SSS}method\:%l%n%t%m%n
# remote log4j.rootLogger =INFO,socket,logs,Console |
以上配置,本地没有日志文件,文件在服务器端,控制台也有日志输出,要想控制台没有日志输出,应该改为如下配置:
log4j.appender.socket=org.apache.log4j.net.SocketAppender #服务器ip log4j.appender.socket.RemoteHost=192.168.1.111 #日志系统传输的端口号 log4j.appender.socket.Port=4712 log4j.appender.socket.LocationInfo=true # patteren log4j.appender.socket.layout=org.apache.log4j.PatternLayout log4j.appender.socket.layout.ConversionPattern=[%-5p]%d{yyyy-MM-ddHH\:mm\:ss,SSS}method\:%l%n%t%m%n
# remote log4j.rootLogger =INFO,socket,logs |
1.3 本地要用到的java类
由于日志是一个服务工具,所以将java类写到项目中的工具类的包中即可。主要用到两个类:
1.3.1Log4jConfig.java
此类的主要作用是:引进log4j.properties配置文件
public class Log4jConfig { private static booleanisReload = true; public static void load() { String path = Log4jConfig.class.getClass().getResource("/") .getPath() + "config/log4j.properties"; PropertyConfigurator.configureAndWatch(path,1000); }
private static void reload() { if (isReload) { load(); } isReload = false; }
public void setReload(boolean flag) { isReload = flag; } }
|
1.3.2 Logger.java
此类主要用于输出日志信息的方法
publicclass Logger { private Log log = null; static{ Log4jConfig.load();//装载log4j配置文件 } private Logger() { log = LogFactory.getLog(this.getClass()); }
private Logger(Class c) { log = LogFactory.getLog(c); }
private Logger(String className) { log = LogFactory.getLog(className); }
publicstatic Logger getLogger() { returnnew Logger(); }
publicstatic Logger getLogger(Class c) {
returnnew Logger(c); }
publicstatic Logger getLogger(String className) { returnnew Logger(className); }
publicvoid trace(String info) { if (log.isTraceEnabled()) log.trace(info); }
publicvoid debug(String info) { if (log.isDebugEnabled()) log.debug(info); }
publicvoid info(String info) { if (log.isInfoEnabled()) log.info(info); }
publicvoid warn(String info) { if (log.isWarnEnabled()) log.warn(info); }
publicvoid error(String info) { if (log.isErrorEnabled()) log.error(info); }
publicvoid fatal(String info) { if (log.isFatalEnabled()) log.fatal(info); }
publicbooleanisTraceEnabled() { returnlog.isTraceEnabled(); }
publicbooleanisDebugEnabled() { returnlog.isDebugEnabled(); }
publicbooleanisInfoEnabled() { returnlog.isInfoEnabled(); }
publicbooleanisWarnEnabled() { returnlog.isWarnEnabled(); }
publicbooleanisErrorEnabled() { returnlog.isErrorEnabled(); }
publicbooleanisFatalEnabled() { returnlog.isFatalEnabled(); } publicvoid info(Exception e, ThrowablefillInStackTrace) { if (log.isInfoEnabled()) log.info(e, fillInStackTrace); }
}
|
1.3.3 运用方法
只要在需要输出日志的地方引入上述方法即可
例如:
publicclassTestLog {
/** * @paramargs */ publicstatic Logger logger = Logger.getLogger(TestLog.class); publicstaticvoid main(String[] args) { Logger logger = Logger.getLogger("category");//消息的类别 logger.info("Message");//具体的消息 logger.error("Message");//具体的消息 logger.warn("Message");//具体的消息
try {
logger.info("---"); } catch (Exception e) { logger.info(e, e.fillInStackTrace()); logger.info(e,e.fillInStackTrace()); logger.info(e.getMessage()); logger.error(e.toString());; } }
} |
1.4错误解决方法
1.4.1 配置web.xml
如果配完本地的日志文件,也导入了jar包,运行一下,会有日志打印到本地,注意:有时候日志写不到log4j的log文件中,可能的一个原因是web.xml中需要做如下配置
<!-- 创建log4j.properties的监听器 --> <listener> <listener-class>com.log.util.Log4jListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/config/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> |
1.4.2 防火墙
如果防火墙开着,也会影响日志的发送
本地防火墙,手动在控制面板更改。 如果是linux系统,则用关闭防火墙的命令,本文用的是ubantu,用的命令是:sudo service ufw stop |
2. 日志服务器的配置
2.1 安装jdk步骤
2.1.1 下载jdk
下载JDK1.8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
选择和自己系统一致的版本,本文配置选择的是64位的linux系统 jdk-8u91-linux-x64.tar.gz
|
2.1.2 linux中上传jdk
ubuntulinux中上传JDK1.8 本文的目录是srv 将jdk安装包,下载本地之后,运行FTP上传到linux系统。 |
2.1.3 解压
找到上传目录,进行解压 sudo tar zxvf jdk-8u25-linux-x64.tar.gz -C /usr/lib/jvm |
2.1.4配置环境变量
sudogedit /etc/profile 在文本编辑器最后添加如下的语句 export JAVA_HOME=/usr/lib/jvm/jdk1.8 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
|
2.1.5 配置版本
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_25 /bin/java 300 sudo update-alternatives --install /usr/bin/javacjavac /usr/lib/jvm/jdk1.8.0_25 /bin/javac 300 执行代码: sudo update-alternatives --config java
|
2.1.6 测试
java -version |
2.2 jar包
连接虚拟机后,通过FTP将从http://logging.apache.org/log4j/1.2/download.html
下载的log4j-1.2.17.jar上传到虚拟机。
2.2.1 导入jar包
运用linux命令:mkdir新建一个目录存放log4j的jar包,本文选择的是/opt/log
2.2.2 配置文件
在放log4j 的jar包的同一个目录,新建一个配置文件,命名为:socketserver.properties
注意:jar包和properties文件必须在同一目录
配置文件内容如下:
log4j.rootLogger=INFO,A1,localLogs log4j.category.org.apache.log4j.net=INFO
log4j.appender.A1=org.apache.log4j.lf5.LF5Appender log4j.appender.A1.MaxNumberOfRecords=700
log4j.appender.localLogs=org.apache.log4j.DailyRollingFileAppender每天产生一个日志文件 log4j.appender.localLogs.bufferedIO=true log4j.appender.localLogs.bufferSize=5120 服务器端内存缓存量 log4j.appender.localLogs.File=/opt/log/192.168.1.12/test-info.log日志存放目录 log4j.appender.localLogs.layout=org.apache.log4j.PatternLayout log4j.appender.localLogs.Encoding=UTF-8编码格式 log4j.appender.localLogs.layout.ConversionPattern=%d [%t] - %m%n log4j.appender.localLogs.DatePattern='.'yyyy-MM-dd'.log'日志文件的格式
如: test-info.log 是当前日志存放文件 test-info.log.2016-07-04.log是前一天存放的日志文件
|
2.2.3 启动
启动命令:
java -classpath log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer 4712 socketserver.properties
|
启动命令中:4712是客户端中配置的端口号,两者必须一致
启动成功标志:
没有报任何warn、error错误,方为启动成功。客户端可以给日志服务器传输日志了~~~
|
2.2.4 Error
配置好后,启动命令没有报错,就好,如果报如下错,则
这说明jdk环境没有配好。先用一下命令 sudo apt-get install libxrender-dev 上述命令安装完之后,再启动,如果不行,再试一下下面的命令 sudo apt-get install libxtst-dev
|