log4j的简单的例子~以及使用log4j和不使用log4j的对比

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
    我们先来看一个简单的例子,它是一个用Java实现的客户/服务器网络程序。刚开始我们不使用Log4j,而是使用了一系列的打印语句,然后我们将使用Log4j来实现它的日志功能。这样,大家就可以清楚地比较出前后两个代码的差别。 
   
   2.1. 不使用Log4j 
   
  2.1.1. 客户程序 
  
   package log4j ; 
   
  import java.io.* ; 
  import java.net.* ; 
    
  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. 服务器程序 
  
    package log4j ; 
   
  import java.util.* ; 
  import java.io.* ; 
  import java.net.* ; 
   
   
  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!" ) ; 
   
        // wait for client's connection 
        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 ) ; 
   
      // send welcome string to client 
      writer.println ( "Java server without log4j, " + new Date () ) ; 
   
      while ( true ) { 
        try { 
          // read from client 
          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. 客户程序 
   
  
    package log4j ; 
   
  import java.io.* ; 
  import java.net.* ; 
   
  // add for log4j: import some package 
  import org.apache.log4j.PropertyConfigurator ; 
  import org.apache.log4j.Logger ; 
  import org.apache.log4j.Level ; 
   
   
  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" ) ; 
   
      // add for log4j: set the level 
  //    logger.setLevel ( ( Level ) Level.DEBUG ) ; 
   
      try{ 
        client = new Socket( "localhost" , 8001 ) ; 
   
        // add for log4j: log a message with the info level 
        logger.info ( "Client socket: " + client ) ; 
   
        in = client.getInputStream () ; 
        out = client.getOutputStream () ; 
      } catch ( IOException e ) { 
   
        // add for log4j: log a message with the error level 
        logger.error ( "IOException : " + e ) ; 
   
        System.exit ( 0 ) ; 
      } 
   
      try{ 
        reader = new BufferedReader ( new InputStreamReader ( in ) ) ; 
        writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ; 
   
        welcome = reader.readLine () ; 
   
        // add for log4j: log a message with the debug level 
        logger.debug ( "Server says: '" + welcome + "'" ) ; 
   
        // add for log4j: log a message with the debug level 
        logger.debug ( "HELLO" ) ; 
   
        writer.println ( "HELLO" ) ; 
        response = reader.readLine () ; 
   
        // add for log4j: log a message with the debug level 
        logger.debug ( "Server responds: '" + response + "'" ) ; 
   
        // add for log4j: log a message with the debug level 
        logger.debug ( "HELP" ) ; 
   
        writer.println ( "HELP" ) ; 
        response = reader.readLine () ; 
   
        // add for log4j: log a message with the debug level 
        logger.debug ( "Server responds: '" + response + "'") ; 
   
        // add for log4j: log a message with the debug level 
        logger.debug ( "QUIT" ) ; 
   
        writer.println ( "QUIT" ) ; 
      } catch ( IOException e ) { 
   
        // add for log4j: log a message with the warn level 
        logger.warn ( "IOException in client.in.readln()" ) ; 
   
        System.out.println ( e ) ; 
      } 
      try { 
        Thread.sleep ( 2000 ) ; 
      } catch ( Exception ignored ) {} 
    } 
  } 


   
  2.2.2. 服务器程序 
   
  
    package log4j; 
   
  import java.util.* ; 
  import java.io.* ; 
  import java.net.* ; 
   
  // add for log4j: import some package 
  import org.apache.log4j.PropertyConfigurator ; 
  import org.apache.log4j.Logger ; 
  import org.apache.log4j.Level ; 
   
   
  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" ) ; 
   
      // add for log4j: set the level 
  //    logger.setLevel ( ( Level ) Level.DEBUG ) ; 
   
      try{ 
        server = new ServerSocket ( SERVER_PORT ) ; 
   
        // add for log4j: log a message with the info level 
        logger.info ( "ServerSocket before accept: " + server ) ; 
   
        // add for log4j: log a message with the info level 
        logger.info ( "Java server with log4j, on-line!" ) ; 
   
        // wait for client's connection 
        socket = server.accept() ; 
   
        // add for log4j: log a message with the info level 
        logger.info ( "ServerSocket after accept: " + server ) ; 
   
        in = socket.getInputStream() ; 
        out = socket.getOutputStream() ; 
   
      } catch ( IOException e ) { 
   
        // add for log4j: log a message with the error level 
        logger.error ( "Server constructor IOException: " + e ) ; 
        System.exit ( 0 ) ; 
      } 
      reader = new BufferedReader ( new InputStreamReader ( in ) ) ; 
      writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ; 
   
      // send welcome string to client 
      writer.println ( "Java server with log4j, " + new Date () ) ; 
   
      while ( true ) { 
        try { 
          // read from client 
          clientRequest = reader.readLine () ; 
   
          // add for log4j: log a message with the debug level 
          logger.debug ( "Client says: " + clientRequest ) ; 
   
          if ( clientRequest.startsWith ( "HELP" ) ) { 
   
            // add for log4j: log a message with the debug level 
            logger.debug ( "OK!" ) ; 
   
            writer.println ( "Vocabulary: HELP QUIT" ) ; 
          } 
          else { 
            if ( clientRequest.startsWith ( "QUIT" ) ) { 
   
              // add for log4j: log a message with the debug level 
              logger.debug ( "OK!" ) ; 
   
              System.exit ( 0 ) ; 
            } 
            else { 
   
              // add for log4j: log a message with the warn level 
              logger.warn ( "Command '"  + clientRequest + "' not understood." ) ; 
   
              writer.println ( "Command '" + clientRequest + "' not understood." ) ; 
            } 
          } 
        } catch ( IOException e ) { 
   
          // add for log4j: log a message with the error level 
          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 


   
  2.3. 比较 
   

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



参考:http://wenku.baidu.com/view/83f294e69b89680203d82569.html

深入解析Java日志框架:Logback、Log4j 2与SLF4J的区别与使用指南 阅读详情

相关推荐

开发中为什么要排除Spring boot集成的Log框架使用log4j2呢?如何排除?

一、先聊聊我们Java程序员喜欢用的日志工具都有什么? 1、java.util.logging:是JDK在1.4版本中引入的Java原生日志框架,这个使用率现在来说较少了。 2、Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。 3、LogBack:是Log4j的一个改良版本,性能优势明显,使用热度较高 4

技术二哥 4363

个人学习 Log4j总结--什么是Log4j

个人学习 Log4j总结--什么是Log4j

junR_980218的博客 1118

log4j了,用Logback管理日志

为什么log4j了呢? 因为log4jLogback都是同一个作者(ceki)写的,他本人说:log4j太烂了,想再改了。所以写了一个log4j的升级版本,那就是Logback。我想开发者本人说的,应该够权威了吧! 怎么用好Logback(日志实现)呢? SLF4J(日志门面,上面两个框架都是同一个作者写的)搭配使用,效果更佳!(springboot中用的也是这两个) ...

river66的博客 855

在eclipse中使用POI报错ERROR StatusLogger Log4j2 could not find a logging implementation. NoSuchMethodError

查阅各种资料后发现是由于POI的版本过高导致,我使用的eclipse版本是2023-09 (4.29.0),POI版本为5.2.3,可能该版本的eclipse支持太高版本的POI。改为使用3.6版本的POI后该问题消失。

learnpaisen的博客 1854

Java项目引入POI后log4j报错-解决办法

引入POI库后,报错“ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...”-解决方法。

weixin_47130880的博客 6197

日志框架log4j升级至log4j2

大家好,我是默语,擅长全栈开发、运维人工智能技术。在这篇博客中,我将详细介绍如何将日志框架从Log4j升级到Log4j2,确保在项目中实现更高效、更安全的日志管理。关键词:Log4j2升级、日志框架、Java日志、SLF4J、Log4j2配置。升级步骤具体操作删除Log4j核心包注释Log4j依赖,并排除第三方包引入的Log4j引入Log4j2SLF4J桥接包添加Log4j2核心包SLF4J与Log4j2的桥接包修改日志打印代码使用SLF4J的LoggerFactory进行日志打印。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 6万+

Log4j & Log4j2~从入门到入坑。

Log4j & Log4j2~从入门到入坑。

lyfGeek的博客 227

spdlog与Log4j对比:Java生态的C++实现

在当今的软件开发中,日志记录(Logging)是系统可观测性的核心支柱。无论是Java生态中家喻户晓的Log4j,还是C++领域的高性能新星spdlog,都在各自的领域发挥着重要作用。本文将深入对比这两个跨语言的日志框架,为开发者提供技术选型的深度参考。 ## 核心架构对比 ### spdlog架构概览 ```mermaid graph TB A[spdlog核心架构] --> B[...

gitblog_01144的博客 990

log4j使用方法

log4j使用方法

qq_44884577的博客 586

最详细、最全面的【Java日志框架】介绍,建议收藏,包含JUL、log4j、logback、log4j2等所有主流框架

本文为 【Java日志框架】 相关知识,对日志的概念与作用,JUL日志框架,Log4j日志框架,Logback日志框架,Log4j2日志框架,日志门面如Slf4j日志门面、JCL日志门面等进行详尽介绍~

小新要变强的博客 3894

SpringBoot日志框架选型——Log4j2的配置与使用

在选择日志框架的时候大家是是也我一样,被各种名词所困扰?这里给大家介绍一下吧:这里我们先来了解一下什么是日志门面框架,它就像一个司令官,接受到你的命令之后他会找具体的士兵进行具体的输出日志操作。那为啥叫门面呢?找人办事至少得有门路对。名词作用简介JCL日志门面框架之前叫Jakarta Commons Logging,简称JCL,提供了一个 Log 接口,该接口既轻量级又是其他日志记录工具包的独立抽象。它为中间件/工具开发人员提供了一个简单的日志记录抽象,允许开发人员选择特定的日志实现。...

Jack魏 1266

关于Log4j 1.x 升级Log4j 2.x 那些事

log4j 1.x 升级log4j 2.x 踩坑攻略

极客星云-CSDN博客 1万+

log4j使用总结

log4j使用总结

qq_44884203的博客 254

Log4j使用方法总结

Log4j使用方法总结  #OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG#这里定义能显示到的最低级别,若定义到INFO级别,则看到DEBUG级别的信息了~!log4j.rootLogger=DEBUG#将DAO层log记录到DAOLog,allLog中log

1729

commons-logging-LogLog4j使用

先上参考----http://www.cnblogs.com/likwo/archive/2010/08/31/1813595.html     感谢~ 分4部分:1.Log的单独是用。 2.log4j.properties; 3.Log4j的单独使用 4.Log+Log4j的组合使用 1、Log单独使用:载入jar包--编写代码(此处,没有设置log.properties)

FZZFFFFF的专栏 619

Java MyBatis框架:(三)LOG4J使用以及MyBatis 对 log4j 的支持

LOG4J使用以及MyBatis 对 log4j 的支持1.log4j 简介2.日志级别3.log4j使用1.导包2.配置文件3.日志的输出格式4.测试4.MyBatis 对 log4j 的支持1.通过开启 log4j 的支持 1.log4j 简介 log4j 是 Apache 提供的一款记录日志的工具 log4j既可以将日志信息打印在控制台, 也可以打印输出到一个日志文件中 log4j 可以定制日志的输出格式 log4j 可以定制日志级别 2.日志级别 级别 含义 FATAL 致

地球村 593

log4j2 pattern 行号_Log4j2进阶使用(Pattern Layout详细设置)

1.进阶说明通过配置Layout打印格式化的日志,Log4j2支持很多的Layouts:CSV GELF HTML JSON Pattern Serialized Syslog XML YAML本文仅介绍Pattern Layouts的详细使用。本文基于Log4j2基本使用入门。请先参考上面的基本使用入门。2.Pattern LayoutsPattern Layouts是一个灵活的布局,是最常用的...

weixin_35172715的博客 1405

使用Log4J2.properties作为Spring Boot的日志工具

Spring Boot 的官网教材 说可以使用 Log4J 作为日志工具,但是并没有给出详细的说明,也陆续找了下网友的例子,跟着上面做,在 application.properties 里注册了 log4j2.xml (注意log4j.properties),运行 Spring Boot 的 main 方法报错,说找到 org.apache.log4j.Priority :出错日志如下

Allen_jinjie 的技术空间 7438

java log4jlogback,Log4j2 还是 Logback?2020 年Java 日志框架到底哪个性能好?

日志框架大战随着 SLF4j 的一统天下而落下帷幕,但 SLF4j 仅仅是接口,实现方面, logback 与 log4j2 仍然难分高下,今天我们就来聊一聊,日志框架实现到底是该选择 Log4j2 还是 Logback。这篇文章我们将从功能、API 设计、可扩展性、性能四个方面展开讨论。生态老牌的 Log4j2 凭借着入场早、背靠 Apache 两大优势有着错的用户支持,官网文档也很完善。新生...

weixin_29189363的博客 702
上一篇: log4j实现日志集中存储
下一篇: Java RandomAccessFile用法
ketonfly
博客等级 码龄16年 17粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值