框架(五)日志

来源:互联网 发布:巨人网络工作怎么样 编辑:程序博客网 时间:2024/06/06 03:03

级别(level)
ALL Level 是最低等级的,用于打开所有日志记录。
DEBUG Level 指出细粒度信息事件对调试应用程序是非常有帮助的。
INFO level 表明 消息在粗粒度级别上突出强调应用程序的运行过程。
WARN level 表明会出现潜在错误的情形。
ERROR level 指出虽然发生错误事件,但仍然不影响系统的继续运行。
FATAL level 指出每个严重的错误事件将会导致应用程序的退出。
OFF Level 是最高等级的,用于关闭所有日志记录。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
日志的副作用
日志输出目的地:输出到控制台的速度和输出到文件系统的速度是不一样的。
日志输出格式:格式简单,速度也更快。
日志级别:日志级别设置的越低,输出的日志内容越多,对性能的影响也越大。
理想的日志模式
当前时间( 精确到毫秒);日志级别;线程名称;简单的日志名;日志信息(描述和上下文)。
Log开源框架
日志框架commons-logging
配置commons-logging.properties
org.apache.commons.logging.LogFactory= org.apache.commons.logging.impl.LogFactoryImpl
实现原理: JCL会在classpath下去加载对应的日志工厂实现类,具体的日志工厂实现类可以是log4j实现【默认】,可以是jul实现等等。
缺点: classloader问题、log4j尚不支持参数占位符打日志的方式。

slf4j的设计:接口和实现分离
这里写图片描述

Log4J

**主要的组件:**Loggers(记录器),Appenders(输出源),Layouts(布局)。**级别:**DEBUG<INFO<WARN<ERROR<FATAL。**日志输出的位置:**ConsoleAppender(控制台)FileAppender(文件)DailyRollingFileAppender(每天产生一个日志文件)RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)WriterAppender(将日志信息以流格式发送到任意指定的地方)对象**输出日志信息格式:**HTMLLayout  格式化日志输出为HTML表格PatternLayout   根据指定的转换模式格式化日志输出SimpleLayout    以一种非常简单的方式格式化日志输出%m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

实例( 载自gmmgood)

log4j.rootLogger=DEBUG,CONSOLE,A1,im#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASElog4j.addivity.org.apache=true#################### Console Appender###################log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.Threshold=DEBUGlog4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n###################### File Appender#####################log4j.appender.FILE=org.apache.log4j.FileAppenderlog4j.appender.FILE.File=file.loglog4j.appender.FILE.Append=falselog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n####################DailyRolling File###################log4j.appender.A1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A1.File=SampleMessages.log4jlog4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout######################### Rolling File########################log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppenderlog4j.appender.ROLLING_FILE.Threshold=ERRORlog4j.appender.ROLLING_FILE.File=rolling.loglog4j.appender.ROLLING_FILE.Append=truelog4j.appender.ROLLING_FILE.MaxFileSize=10KBlog4j.appender.ROLLING_FILE.MaxBackupIndex=1log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n##################### Socket Appender####################log4j.appender.SOCKET=org.apache.log4j.RollingFileAppenderlog4j.appender.SOCKET.RemoteHost=localhostlog4j.appender.SOCKET.Port=5001log4j.appender.SOCKET.LocationInfo=true# Set up for Log Facter 5log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayoutlog4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n######################### Log Factor 5 Appender########################log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appenderlog4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000######################### SMTP Appender#######################log4j.appender.MAIL=org.apache.log4j.net.SMTPAppenderlog4j.appender.MAIL.Threshold=FATALlog4j.appender.MAIL.BufferSize=10log4j.appender.MAIL.From=chenyl@hollycrm.comlog4j.appender.MAIL.SMTPHost=mail.hollycrm.comlog4j.appender.MAIL.Subject=Log4J Messagelog4j.appender.MAIL.To=chenyl@hollycrm.comlog4j.appender.MAIL.layout=org.apache.log4j.PatternLayoutlog4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n######################### JDBC Appender#######################log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/testlog4j.appender.DATABASE.driver=com.mysql.jdbc.Driverlog4j.appender.DATABASE.user=rootlog4j.appender.DATABASE.password=log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayoutlog4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n####################自定义 Appender###################log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppenderlog4j.appender.im.host = mail.cybercorlin.netlog4j.appender.im.username = usernamelog4j.appender.im.password = passwordlog4j.appender.im.recipient = corlin@cybercorlin.netlog4j.appender.im.layout=org.apache.log4j.PatternLayoutlog4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j2

1、classstatic Logger logger = LogManager.getLogger(Test.class.getName());2、xml<?xml version="1.0" encoding="UTF-8"?><configuration status="error"><!--先定义所有的appender-->    <appenders><!--这个输出控制台的配置-->        <Console name="Console" target="SYSTEM_OUT"><!--这个是输出日志的格式-->            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>        </Console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->        <File name="Error" fileName="${web:rootDir}/logs/error.log" append="false"><!--文件只记录level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>            <PatternLayout charset="UTF-8" pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>        </File><!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->        <RollingFile name="RollingFile" fileName="${web:rootDir}/logs/history.log"                     filePattern="log/$${date:yyyy-MM}/history-%d{MM-dd-yyyy}-%i.log.gz">            <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>            <SizeBasedTriggeringPolicy size="50MB"/>        </RollingFile>    </appenders><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->    <loggers><!--建立一个默认的root的logger-->        <root level="trace">            <appender-ref ref="Error"/>            <appender-ref ref="RollingFile"/>            <appender-ref ref="Console"/>        </root>    </loggers></configuration>3、web.xml<listener>    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class></listener><filter>    <filter-name>log4jServletFilter</filter-name>    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class></filter><filter-mapping>    <filter-name>log4jServletFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>
0 0
原创粉丝点击