log4j如何设置在控制台打印错误

本文详细介绍了log4j的使用方法,包括下载、配置及异常日志记录,通过实例展示了如何在计算类中处理输入错误、除法异常和数组越界情况,并使用log4j记录不同级别的错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 1.1相关英文详解  
  2.  log:日志  debug:调试 error:错误 warn:警告, 提醒 info:消息  
  3. 1.2 什么是log4j?为什么要有log4j?  
  4.  log4j定义:log4j是一个流行、优秀的日志记录工具,它能够以各种灵活的方法输出日志信息;  
  5.  为什么要用log4j:在程序发生错误时,我们希望可以以文件的形式保存这此异常信息,以便日后查看处理优化程序,  
  6.  就可以用到日志记录,现流行最优秀的一款:log4j,它是开源的,且方便易用;  
  7. 1.3如何使用log4j记录程序发后的异常日志信息?  
  8.     (1). 下载log4j的jar包.    log4j-1.2.15.jar  
  9.     (2). 请将jar包粘贴到工程中.  
  10.     (3). 导入jar包:工程名,右键--properties--java build path--libraries--add jars……  
  11.          第二步可以不执行,在第三步中工程名,右键--properties--java build path--libraries--add External jars……即可  
  12.     区别:add jars……是添加工程内jar包,add External jars……则不限制于包内,用于jar包未放置于工程内;  
  13.     建议执行第二步,实现工程、jar包一体化,避免出现未知的异常  
  14.     (4). 新建一个log4j.properties:src--右键--new--file--命名log4j.properties  
  15.     (5). 配置log4j.properties:  
  16.    ### 设置优先级别、以及输出源 stdout输出到控制台,file保存到文件###  
  17.    log4j.rootLogger=debug, stdout, file  
  18.    ### 把日志信息输出到控制台 ###  
  19.    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  20.    log4j.appender.stdout.Target=System.out  
  21.    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  22.    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n  
  23.   
  24.    ### 把日志信息输出到文件:accp.log ###  
  25.    log4j.appender.file=org.apache.log4j.FileAppender  
  26.    log4j.appender.file.File=accp.log  
  27.    log4j.appender.file.layout=org.apache.log4j.PatternLayout  
  28.    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %l  %m%n  
  29.     (6).详解配置:  
  30.    log4j.appender.stdout=org.apache.log4j.ConsoleAppender:添加到控制台   
  31.    log4j.appender.stdout.Target=System.out:方式为输出    
  32.    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout:信息布局方式为自定义  
  33.    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n  
  34.    布局方式:布局方式:yyyy-年mm-月dd-天hh-小时mm-分钟ss-秒钟 %l:具体异常代码行数%m:异常信息%n:信息换行  
  35.     (7)优先级:    
  36.         优先级从高到低分别是ERROR、WARN、INFO、DEBUG  
  37.     (8).总结:  
  38.      a:配置文件中不能包含中文(注释中文也不可),因为配置文件保存标准为:"ISO-8859-1";  
  39.      b:log4j.rootLogger=debug, stdout, file中的debug可替换为ERROR、WARN、INFO、DEBUG   
  40.      c:根据需求设置级别,如设置为debug,则会忽略比它级别低的所有异常  
  41.      d:log4j.rootLogger=debug, stdout, file中的stdout, file可选其一  
  42. 1.4实例说明:  
  43.  需求:需求:计算类(compute)要求用户输入二个数执行相除并保存结果用异常类进行处理和使用log4j记录异常信息  
  44. 代码实现:  
  45. package com.t97.compute;  
  46. import java.util.InputMismatchException;  
  47. import java.util.Scanner;  
  48. import org.apache.log4j.Logger;//导入log4j包  
  49. public class Compute {  
  50.  // 声明数组  
  51.  private int[] num = new int[2];  
  52.  // 封装属性  
  53.  public int[] getNum() {  
  54.   return num;  
  55.  }  
  56.  public void setNum(int[] num) {  
  57.   this.num = num;  
  58.  }  
  59.    
  60.  public static void main(String[] args) {  
  61.   Scanner input = new Scanner(System.in);  
  62.   Compute compute = new Compute();  
  63.   Logger log = Logger.getLogger(Compute.class);  
  64.   int result = 0;  
  65.   int[] num = compute.getNum();  
  66.   String answer = null;  
  67.   try {  
  68.    System.out.println("请输入第一个数字:");  
  69.    num[0] = input.nextInt();  
  70.    System.out.println("请输入第二个数字:");  
  71.    num[1] = input.nextInt();  
  72.    result = num[0] / num[1];  
  73.    System.out.println("是否保存结果?(y/n)");  
  74.    answer = input.next();  
  75.    if (answer.equalsIgnoreCase("y")) {  
  76.     num[2] = result;// 试图将计算结果保存到数组中  
  77.    }  
  78.   } catch (InputMismatchException e) {  
  79.    System.out.println("用户输入数据类型错误!");  
  80.    log.debug("用户输入数据类型错误!");  
  81.   } catch (ArithmeticException ae) {  
  82.    System.out.println("发生算术错误!" + ae.getMessage());  
  83.    log.info("发生算术错误!" + ae.getMessage());  
  84.   } catch (ArrayIndexOutOfBoundsException aee) {  
  85.    System.out.println("数组发生越界!");  
  86.    log.warn(aee);  
  87.   } catch (Exception exception) {  
  88.    System.out.println("程序发生异常,给您带来不便,请重新启动!");  
  89.    log.error(exception);  
  90.   } finally {  
  91.    System.out.println(num[0] + "除以" + num[1] + "的计算结果为:" + result);  
  92.   }  
  93.  }  
  94. }  
  95. 1.4.1日志分析:  
  96. 预记录一:用户输入的不是数字时,InputMismatchException捕获到异常,结束程序,输出提示:用户输入数据类型错误!  
  97. log.debug("用户输入数据类型错误!"),记录错误信息:  
  98.   2009-09-28 11:36:23 com.t97.compute.Compute.main(Compute.java:46)  用户输入数据类型错误!  
  99. 预记录二: 用户输入的第二个数即除数为0时,ArithmeticException捕获到异常,结束程序,输出提示:发生算术错误!/ by zero  
  100.  log.info("发生算术错误!" + ae.getMessage()),记录错误信息:  
  101.   2009-09-28 11:35:00 com.t97.compute.Compute.main(Compute.java:49) java.lang.ArithmeticException: / by zero  
  102. 预 记录三:程序提示:"是否保存结果?(y/n)",如果输入"Y"后,ArrayIndexOutOfBoundsException捕获到异常,结束程 序,输出提示:数组发生越界因为数据长度为2,而程序试图"num[2] = result;// 试图将计算结果保存到数组中",发生越界!  
  103.           log.warn(aee), 记录错误信息:  
  104.   2009-09-28 11:37:41 com.t97.compute.Compute.main(Compute.java:52) java.lang.ArrayIndexOutOfBoundsException: 2  
  105. 预记录四:未知错误,Exception超类捕获到异常,结束程序,输出提示"程序发生异常,给您带来不便,请重新启动!"  
  106.           log.error(exception),记录错误信息:(未知的……) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值