相对而言,这个日志系统的配置就没那么随意了,而且有些功能用起来也不是那么爽,譬如动态读取配置文件。不过鉴于使用这个日志的系统还是很多,所以也写一个demo贴出来,风格跟log4j2一样,配置的说明全在代码里。
ps:此处只使用xml方式来配置,个人觉着properties方式不是很友好,理解起来没xml容易。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration> <!--
日志信息的输出目的地(Appender):
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
org.apache.log4j.jdbc.JDBCAppender(将日志信息写到数据库里) 日志信息的输出格式(Layout):
org.apache.log4j.HTMLLayout(HTML表格形式)
org.apache.log4j.PatternLayout(通过表达式指定格式)
org.apache.log4j.SimpleLayout(仅仅包含日志信息的级别和信息的简单字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 表达式详解(类似于C语言):
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个”%”字符 %F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。
--> <!--控制台输出-->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</layout>
</appender> <!--日志输出到文件中-->
<!--每天产生一个文件-->
<appender name="info" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 地址和文件名 -->
<param name="File" value="logs/cnblog.log"/>
<!--自动追加-->
<param name="Append" value="true"/>
<!--输出文件的最大长度,默认是10M-->
<param name="MaxFileSize" value="2MB"/>
<!--备份文件数,默认是1个-->
<param name="MaxBackupIndex" value="30"/>
<!--布局模式-->
<layout class="org.apache.log4j.PatternLayout">
<!--输出模式-->
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</layout>
</appender> <appender name="error" class="org.apache.log4j.FileAppender">
<param name="File" value="logs/cnblog-error.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="2MB"/>
<!--定义局部输出级别-->
<param name="Threshold" value="ERROR"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</layout>
<!--过滤器设置输出的级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR"/>
<param name="levelMax" value="WARN"/>
<param name="AcceptOnMatch" value="true"/>
</filter>
</appender> <!--输出到数据库-->
<appender name="database" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/><!-- mysql6版必须设置时区 -->
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="user" value="user"/>
<param name="password" value="password"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="INSERT INTO tb_log (create_date,thread,level,class,message) values ('%d{yyyy-MM-dd HH:mm:ss}','%t','%p','%c','%m')"/>
</layout>
</appender> <!--level:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL-->
<root>
<!--定义全局的日志输出级别,但是在输出目的地的配置中配置的具体输出级别优先级高于全局定义的优先级。-->
<priority value="DEBUG"/>
<appender-ref ref="console"/>
<appender-ref ref="info"/>
<appender-ref ref="warn"/>
<appender-ref ref="database"/>
</root> </log4j:configuration>
appender可根据自己的业务需求来添加,log4j内容很多,这里只列出一些常用的,其他的自行官档。
===========================习惯性版本分割===========================