大型项目中非常多情况下要分析程序的日志信息,怎样管理自己的日志信息至关重要。

在应用程序中加入日志记录总的来说基于三个目的 ,

  • 监视代码中变量的变化情况,周期性的记录到文件里供其它应用进行统计分析工作;
  • 跟踪代码执行时轨迹,作为日后审计的根据。
  • 担当集成开发环境中的调试器的作用。向文件或控制台打印代码的调试信息。  

最普通的做法就是在代码中嵌入很多的打印语句,这些打印语句能够输出到控制台或文件里,比較好的做法就是构造一个日志操作类 来封装此类操作。而不是让一系列的打印语句充斥了代码的主体。


这篇文章主要针对基于Java语言实现的项目中的日志管理进行简单的阐述。

一、工具及文件

二、Log4j 简单介绍

在强调可重用组件开发的今天。除了自己从头到尾开发一个可重用的日志操作类外, Apache 为我们提供了一个强有力的日志操作包 -Log4j 。

Log4j 是 Apache 的一个开放源码项目,通过使用 Log4j 。我们能够控制日志信息输送的目的地是控制台、文件、 GUI 组件、甚至是套接口服 务器、 NT 的事件记录器、 UNIX Syslog 守护进程等;我们也能够控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加仔细地控制日志的生成过程。最令人感兴趣的就 是,这些能够通过一个配置文件来灵活地进行配置,而不须要改动应用的代码。

  

       此外,通过 Log4j 其它语言接口,您能够在 C 、C++、.Net 、PL/SQL 程序中使用 Log4j ,其语法和使用方法与在 Java 程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。

并且。通 过使用各种第三方扩展,您能够非常方便地将 Log4j 集成到 J2EE 、 JINI 甚至是 SNMP 应用中。

Log4j主要配置三方面的内容,

  • Logger - 日志写出器 。供程序猿输出日志信息
  • Appender - 日志目的地 。把格式化好的日志信息输出到指定的地方去
  • Layout - 日志格式化器 ,用来把程序猿的 logging request 格式化成字符串

三、简单实例

  • log4j.properties文件配置编写
#配置日志写出器
#log4j.rootLogger = [ level ] , appenderName, appenderName, …
#当中。 level 是日志记录的优先级,分为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
#Log4j 建议仅仅使用四个级别,优先级从高到低各自是ERROR、WARN、INFO、DEBUG 。
#通过在这里定义的级别,您能够控制到应用程序中对应级别的日志信息的开关。比方在这里定义了info级别。则应用程序中全部DEBUG级别的日志信息将不被打印出来。
#appenderName 就是指日志信息输出到哪个地方。能够同一时候指定多个输出目的地。
log4j.rootLogger=info,R,stdout #配置日志目的地,输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender #追加的方式输出
log4j.appender.stdout.follow=true #配置日志格式化器
#能够灵活地指定布局模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #指定布局模式的格式
log4j.appender.stdout.layout.ConversionPattern=%d[%t](%F%L)-%m%n #文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.R=org.apache.log4j.RollingFileAppender #输出日志文件的位置路径TestServer.log
log4j.appender.R.File=TestServer.log #单个文件最大尺寸,在日志文件到达该大小时,将会自己主动滚动。即将原来的内容移到 TestServer.log.1 文件。
log4j.appender.R.MaxFileSize=20MB #指定能够产生的滚动文件的最大数
log4j.appender.R.MaxBackupIndex=20 log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d%5p[%t](%F%L)-%m%n
  • 简单的Java程序实例代码
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator; public class logTest { static public Logger m_logger; static private void InitLog() {
try {
m_logger = Logger.getLogger(logTest.class.getName());
PropertyConfigurator.configure("log4j.properties");
} catch (Exception ex) {
ex.printStackTrace();
}
} public static void main(String[] args) { logTest.InitLog(); m_logger.info("main is start [...]"); try {
m_logger.info("自己定义的异常类对象");
throw new MyException("自己定义的异常");// 抛一个自己定义的异常类对象,传入的參数就是给控制台看的异常
} catch (MyException e) {
m_logger.error(e.getExceptionName().toString(), e);
m_logger.debug(e);
}
m_logger.info("main is over [ OK ]"); } } class MyException extends Exception // 自己定义的异常类 继承Exception类
{
private static final long serialVersionUID = 1L;
private String exceptionName; // 定义一个私有变量,用来为自己定义异常 public MyException() {
} // 创建一个无參数的构造函数 public MyException(String exceptionName) { // 创建一个有參数的构造函数,传入的參数为前面定义的异常名称
this.exceptionName = exceptionName;
} public String getExceptionName() { // 定义一个方法,提供给外部来获取私有变量
return this.exceptionName;
}
}
  • 測试结果

    – 控制台输出例如以下。



    – project文件夹路径输出例如以下。



四、參考引用

Log4j日志管理的简单实例的更多相关文章

  1. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

  2. 项目log4j日志管理详解

    项目log4j日志管理详解 log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了.如果要自定义输出文件,对 ...

  3. Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)

    1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...

  4. Spring集成log4j日志管理

    原文地址:http://blog.csdn.net/naruto1021/article/details/7969535 在使用Spring框架的时候,我们可以很方便的配置log4j来进行日志管理. ...

  5. android log4j日志管理的使用

    以下为log4j1的日志管理,在android 6.0 一下能正常使用,时候更加高级的胃log4j2,持续跟新 android中的log4j日志文件使用需要两个包,我们不需要进行配置文件的配置,一切都 ...

  6. [转]slf4j 与log4j 日志管理

    log4j简易入门 package test.log4j; import org.apache.log4j.Logger; public class HelloLog4j { private stat ...

  7. 用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限

    先来一堆关于上篇文章的废话(不喜者点此隐藏) 今天把博客加了个小功能,就是点标题可以隐藏或展示相关内容,做法很傻,就是引用了bootstrap的两个css类和全部的js文件,其实这样的小功能完全应该自 ...

  8. Log4J日志管理类使用详解 (转)

    一.前言: log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包.由于log4j出色的表现, 当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代j ...

  9. Linux日志管理高级进阶:实例详解syslog

    syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件.syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息.它能记录本地事件或通过网络 ...

随机推荐

  1. Symfony4中文文档: 安装和设置Symfony框架

    安装和设置Symfony框架 要创建新的Symfony应用程序, 首先确保使用的是PHP7.1 或更高版本并且已经安装Componser. 如果未安装, 请首先在系统上全局安装Componser. 如 ...

  2. Python学习笔记(2)--基本数据类型

    在介绍基本数据类型之前,先说一个系统方法type():返回对象的数据类型,可以帮助我们查看系统的类型定义 python不同的版本,类型名称稍有不同,这里使用的是3.5.2版本 一.基本数据类型: 1. ...

  3. unity SystemInfo类 获得电量battery

    我觉得用Unity 开发最爽的地方, 不是unity跨平台,而是用其他语言,要用很复杂的逻辑才能完成的功能,unity用一两句代码就能搞定 就比如说获取Android 系统的电量,不用发广播,不用申请 ...

  4. Spring Boot学习总结(2)——Spring Boot整合Jsp

    怎么使用jsp上面起了疑问,查阅了多方资料,找到过其他人的博客的描述,也找到了spring在github上的给出的例子,看完后稍微改动后成功 整合jsp,于是决定将整合过程记载下来. 无论使用的是那种 ...

  5. 已知二叉树的中序序列为DBGEAFC,后序序列为DGEBFCA,给出相应的二叉树

    面对这种问题时我们该怎么解决? 今天写数据结构题.发现了一道总是碰见问题的题在这里我写了一种求解方法我自己称它为分层递归求解. 第一步通过观察我们知道后序遍历时最后一个是根节点A 在中序序列中A的左边 ...

  6. CodeForces 550E Brackets in Implications(构造)

    [题目链接]:click here~~ [题目大意]给定一个逻辑运算符号a->b:当前仅当a为1b为0值为0,其余为1,构造括号.改变运算优先级使得最后结果为0 [解题思路]: todo~~ / ...

  7. iOS xib View宽高不能改变

    IOS - xib(Interface Builder,view) - can't change view size(view不能改变大小问题) 今天在试着swift语言写个demo,,当中遇到了这个 ...

  8. ios提交程序后出现的各种问题

    提交了几次都被feedback.下面均为本人碰到过得问题.希望对大家解决提交问题有帮助 Number    one:PLA 3.3.12 We found your app uses the iOS ...

  9. .Net 路由处理厉害了

    通过设置路由,可以灵活的显示地址内容.它会自动转换为想要的控制器和方法中去. using System; using System.Collections.Generic; using System. ...

  10. POJ 3281 网络流

    题意: 思路: 网络流 重在建图- 建完了图 就一切都好说了 这道题 我的想法是 先把源点和所有的食品连上边 (容量为1) 再把食品和对应的奶牛连上边 (容量为1) 这个时候要拆点 因为每只奶牛只能才 ...