注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

细节决定成败

 
 
 

日志

 
 

log4j例子  

2010-10-15 16:43:00|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一个简单的例子 Log4j,使用了一系列的打印语句,然后我们将使用Log4j来实现它的日志功能。这样,大家就可以清楚地比较出前后两个代码的差别。

比较这两个应用可以看出,采用Log4j进行日志操作的整个过程相当简单明了,与直接使用System.out.println语句进行日志信息输出的 方式相比,基本上没有增加代码量,同时能够清楚地理解每一条日志信息的重要程度。通过控制配置文件,我们还可以灵活地修改日志信息的格式,输出目的地等等 方面,而单纯依靠System.out.println语句,显然需要做更多的工作。 

  
  2.1. 不使用Log4j
  
  2.1.1. 客户程序
  public class ClientWithoutLog4j {
    public static void main ( String args [] ) {
      String welcome = null;
      String response = null;
      BufferedReader reader = null;
      PrintWriter writer = null;
      InputStream in = null;
      OutputStream out = null;
      Socket client = null;
      try {
        client = new Socket ( "localhost", 8001 ) ;
        System.out.println ( "info: Client socket: " + client ) ;
        in = client.getInputStream () ;
        out = client.getOutputStream () ;
      } catch ( IOException e ) {
        System.out.println ( "error: IOException : " + e ) ;
        System.exit ( 0 ) ;
      }
  
      try{
        reader = new BufferedReader( new InputStreamReader ( in ) ) ;
        writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
  
        welcome = reader.readLine () ;
        System.out.println ( "debug: Server says: '" + welcome + "'" ) ;
  
        System.out.println ( "debug: HELLO" ) ;
        writer.println ( "HELLO" ) ;
        response = reader.readLine () ;
        System.out.println ( "debug: Server responds: '" + response + "'") ;
  
        System.out.println ( "debug: HELP" ) ;
        writer.println ( "HELP" ) ;
        response = reader.readLine () ;
        System.out.println ( "debug: Server responds: '" + response + "'" ) ;
  
        System.out.println ( "debug: QUIT" ) ;
        writer.println ( "QUIT" ) ;
      } catch ( IOException e ) {
        System.out.println ( "warn: IOException in client.in.readln()" ) ;
        System.out.println ( e ) ;
      }
      try{
        Thread.sleep ( 2000 ) ;
      } catch ( Exception ignored ) {}
    }
  }
  
  2.1.2. 服务器程序
  
  public class ServerWithoutLog4j {
  
    final static int SERVER_PORT = 8001 ; // this server's port
  
    public static void main ( String args [] ) {
      String clientRequest = null;
      BufferedReader reader = null;
      PrintWriter writer = null;
      ServerSocket server = null;
      Socket socket = null;
      InputStream in = null;
      OutputStream out = null;
      try {
        server = new ServerSocket ( SERVER_PORT ) ;
        System.out.println ( "info: ServerSocket before accept: " + server ) ;
        System.out.println ( "info: Java server without log4j, on-line!" ) ;
        socket = server.accept () ;
        System.out.println ( "info: ServerSocket after accept: " + server ) ;
        in = socket.getInputStream () ;
        out = socket.getOutputStream () ;
      } catch ( IOException e ) {
        System.out.println( "error: Server constructor IOException: " + e ) ;
        System.exit ( 0 ) ;
      }
      reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
      writer = new PrintWriter ( new OutputStreamWriter ( out ) , true ) ;
      writer.println ( "Java server without log4j, " + new Date () ) ;
      while ( true ) {
        try {
          clientRequest = reader.readLine () ;
          System.out.println ( "debug: Client says: " + clientRequest ) ;
          if ( clientRequest.startsWith ( "HELP" ) ) {
            System.out.println ( "debug: OK!" ) ;
            writer.println ( "Vocabulary: HELP QUIT" ) ;
          }
          else {
            if ( clientRequest.startsWith ( "QUIT" ) ) {
              System.out.println ( "debug: OK!" ) ;
              System.exit ( 0 ) ;
            }
            else{
              System.out.println ( "warn: Command '" +  clientRequest + "' not understood." ) ;
              writer.println ( "Command '" + clientRequest  + "' not understood." ) ;
            }
          }
        } catch ( IOException e ) {
          System.out.println ( "error: IOException in Server " + e ) ;
          System.exit ( 0 ) ;
        }
      }
    }
  }
  
  2.2. 迁移到Log4j
  
  2.2.1. 客户程序
  public class ClientWithLog4j {
   static Logger logger = Logger.getLogger 
    ( ClientWithLog4j.class.getName () ) ;
     public static void main ( String args [] ) {
  
      String welcome = null ;
      String response = null ;
      BufferedReader reader = null ;
      PrintWriter writer = null ;
      InputStream in = null ;
      OutputStream out = null ;
      Socket client = null ;
      PropertyConfigurator.configure ( "ClientWithLog4j.properties" ) ;
      try{
        client = new Socket( "localhost" , 8001 ) ;
        logger.info ( "Client socket: " + client ) ;
        in = client.getInputStream () ;
        out = client.getOutputStream () ;
      } catch ( IOException e ) {
        logger.error ( "IOException : " + e ) ;
        System.exit ( 0 ) ;
      }
  
      try{
        reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
        writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
  
        welcome = reader.readLine () ;
        logger.debug ( "Server says: '" + welcome + "'" ) ;
        logger.debug ( "HELLO" ) ;
        writer.println ( "HELLO" ) ;
        response = reader.readLine () ;
        logger.debug ( "Server responds: '" + response + "'" ) ;
        logger.debug ( "HELP" ) ;
          writer.println ( "HELP" ) ;
        response = reader.readLine () ;
        logger.debug ( "Server responds: '" + response + "'") ;
        logger.debug ( "QUIT" ) ;
        writer.println ( "QUIT" ) ;
      } catch ( IOException e ) {
        logger.warn ( "IOException in client.in.readln()" ) ;
        System.out.println ( e ) ;
      }
      try {
        Thread.sleep ( 2000 ) ;
      } catch ( Exception ignored ) {}
    }
  }
  
  2.2.2. 服务器程序
  public class ServerWithLog4j {
  
    final static int SERVER_PORT = 8001 ; // this server's port
    static Logger logger = Logger.getLogger  ( ServerWithLog4j.class.getName () ) ;
    public static void main ( String args[]) {
      String clientRequest = null ;
      BufferedReader reader = null ;
      PrintWriter writer = null ;
      ServerSocket server = null ;
      Socket socket = null ;
      InputStream in = null ;
      OutputStream out = null ;
      PropertyConfigurator.configure ( "ServerWithLog4j.properties" ) ;
      try{
        server = new ServerSocket ( SERVER_PORT ) ;
        logger.info ( "ServerSocket before accept: " + server ) ;
        logger.info ( "Java server with log4j, on-line!" ) ;
          socket = server.accept() ;
        logger.info ( "ServerSocket after accept: " + server ) ;
        in = socket.getInputStream() ;
        out = socket.getOutputStream() ;
      } catch ( IOException e ) {
        logger.error ( "Server constructor IOException: " + e ) ;
        System.exit ( 0 ) ;
      }
      reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
      writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
      writer.println ( "Java server with log4j, " + new Date () ) ;
      while ( true ) {
        try {
          clientRequest = reader.readLine () ;
          logger.debug ( "Client says: " + clientRequest ) ;
          if ( clientRequest.startsWith ( "HELP" ) ) {
            logger.debug ( "OK!" ) ;
            writer.println ( "Vocabulary: HELP QUIT" ) ;
          }
          else {
            if ( clientRequest.startsWith ( "QUIT" ) ) {
             logger.debug ( "OK!" ) ;
              System.exit ( 0 ) ;
            }
            else {
  
              logger.warn ( "Command '"  + clientRequest + "' not understood." ) ;
              writer.println ( "Command '" + clientRequest + "' not understood." ) ;
            }
          }
        } catch ( IOException e ) {
         logger.error( "IOException in Server " + e ) ;
         System.exit ( 0 ) ;
        }
      }
    }
  }
  
  2.2.3. 配置文件
  
  2.2.3.1. 客户程序配置文件
  
  log4j.rootLogger=INFO, A1
  
  log4j.appender.A1=org.apache.log4j.ConsoleAppender
  
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  
  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
  
  2.2.3.2. 服务器程序配置文件
  
  log4j.rootLogger=INFO, A1
  
  log4j.appender.A1=org.apache.log4j.ConsoleAppender
  
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  
  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n 

  评论这张
 
阅读(757)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018