内存日志系统

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是客户端中配置的端口号,两者必须一致

启动成功标志:

 

没有报任何warnerror错误,方为启动成功。客户端可以给日志服务器传输日志了~~~

 

2.2.4   Error

配置好后,启动命令没有报错,就好,如果报如下错,则

 

这说明jdk环境没有配好。先用一下命令

sudo apt-get install libxrender-dev

上述命令安装完之后,再启动,如果不行,再试一下下面的命令

sudo apt-get install libxtst-dev

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值