Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等; 我们可以 控制每一条日志的输出格式; 通过定义每一条日志信息的级别, 我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 简单示例 1. 首先下载log4j Jar包并引用 地址:http://logging.apache.org/log4j/1.2/ 2.在src根目录下新建log4j.properties文件,包含以下内容 log4j.rootLogger=info, stdout, log, errorlog ###Console ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} [ %t ] [ %p ]:%L - %m%n ### Log ### log4j.appender.log = org.apache.log4j.DailyRollingFileAppender log4j.appender.log.File = log/log.log log4j.appender.log.Append = true log4j.appender.log.Threshold = INFO log4j.appender.log.DatePattern='.'yyyy-MM-dd log4j.appender.log.layout = org.apache.log4j.PatternLayout log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n ### Error ### log4j.appender.errorlog = org.apache.log4j.DailyRollingFileAppender log4j.appender.errorlog.File = log/error.log log4j.appender.errorlog.Append = true log4j.appender.errorlog.Threshold = ERROR log4j.appender.errorlog.DatePattern='.'yyyy-MM-dd log4j.appender.errorlog.layout = org.apache.log4j.PatternLayout log4j.appender.errorlog.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t ] %m%n 3.新建class文件logTest import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; public class logTest { public static void main(String args[]){ // Create a logger by the name of class Log4jTest. Logger logger = Logger.getLogger(logTest.class); // This request will be disabled since Level.DEBUG < Level.INFO. logger.debug("This is debug."); // These requests will be enabled. logger.info("This is an info."); logger.warn("This is a warning."); logger.error("This is an error."); logger.fatal("This is a fatal error."); } } log4j.properties的配置 log4j.properties中的内容为 Log4j的三个重要组件—— Loggers, Appenders, Layouts ,这三个组件协同的工作, 使得开发者能够依据信息类别和级别去纪录信息,并能够运行期间,控制信息记录的方式已经日志存放地点。 配置根Logger,其语法为: log4j.rootLogger= [ level ] ,appenderName, appenderName, ... level 是日志记录的优先级,它相当于一个总控开关,只有级别到这个等级的或以上的日志才被记录 包括以下: 级别: ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF ALL 各级包括自定义级别 DEBUG 指定细粒度信息事件是最有用的应用程序调试 INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 WARN 指定具有潜在危害的情况 ERROR 错误事件可能仍然允许应用程序继续运行 FATAL 指定非常严重的错误事件,这可能导致应用程序中止 OFF 这是最高等级,为了关闭日志记录 appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 ------------------------------------------------------------------------------- 配置日志信息输出目的地Appender,其语法为: log4j.appender.appenderName = appender.class log4j.appender.appenderName.option = value Log4j提供的appender有以下几种: org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) ------------------------------------------------------------------------------- log4j.appender.log.Threshold = ERROR 它是表示在总控开关的前提,觉得精确,只有达到这个级别的日志才被记录到这个文件中 ------------------------------------------------------------------------------- 配置日志信息的格式(布局),其语法为: log4j.appender.appenderName.layout = layout.class Log4j提供的layout有以下几种: org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) ------------------------------------------------------------------------------- 格式参数配置 log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n %m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” %d 输出日志时间点的日期或时间。默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28,921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。 ------------------------------------------------------------------------------- 企业应用 设置指定的类或者包输出的日志格式 #设置指定类,格式为log4j.logger.className(注意加上package路径) log4j.logger.com.anker.log4j.Test1=info,appender1 #设置指定包,格式为log4j.logger.packageName log4j.logger.com.anker.log4j=info,appender1 #若是指定字符串创建的logger实例,则无package路径,如Logger logger2 = Logger.getLogger("Test2"); log4j.logger.Test2=info,appender2 如果在同一类中需要输出多个日志文件呢?通过在类中定义多个logger实例,针对每个logger实例 配置不同的输出文件 private static Log logger1 = LogFactory.getLogger("myTest1"); private static Log logger2 = LogFactory.getLogger("myTest2"); 设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方 log4j.additivity.com.anker.log4j.Test1 = false 注意这里的loggerName是logger的实例名称(指定class,名称则会包含package路径) 若不想输出到rootLogger的日志,却仍想输出到stduout中,可以通过下面指定 log4j.logger.com.anker.log4j.Test1=info,appender1,stdout
Log4j 教程
猜你喜欢
转载自yangeoo.iteye.com/blog/2210000
今日推荐
周排行