log4j日志控件使用.md

1. Jar包引入

maven项目在pom.xml中引入,并设置自动导入

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.9</version>
</dependency>

或者手动下载log4j的jar包,加入项目的依赖。

2. 使用

如果是测试项目,网上说直接把log4j.properties文件放在src文件夹下面就可以,但是我一直报错

log4j:WARN No appenders could be found for logger (log.GuavaCachDemo).
log4j:WARN Please initialize the log4j system properly.

查找原因,发现编译后的文件里没有log4j.properties文件,所以运行时找不到配置文件,将该文件放置到编译后的class文件的根目录就可以了。
或者在程序中显示的指明配置文件的位置也可以。

PropertyConfigurator.configure("src/log4j.properties");

在Web应用中web.xml利用Spring配置log4j

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:config/log4j/log4j.properties</param-value>
</context-param>
<listener>
 <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

程序实例

package log;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class GuavaCachDemo {

    public static void main(String[] args) {
//        PropertyConfigurator.configure("src/log4j.properties");
        Logger logger = Logger.getLogger(GuavaCachDemo.class);
        logger.info("djsdjl");
    }
}

3. 配置解析

1. 配置根Logger

语法为:

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName:就是指定日志信息输出到哪个地方。可以同时指定多个输出目的地。例如:

log4j.rootLogger=info,A1,B2,C3

2. 配置日志信息输出目的地

语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

"fully.qualified.name.of.appender.class" 可以指定下面五个目的地中的一个:

  1. org.apache.log4j.ConsoleAppender(控制台)
  2. org.apache.log4j.FileAppender(文件)
  3. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  5. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

1. ConsoleAppender选项

  • Threshold=WARN:指定日志消息的输出最低层次。
  • ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
  • Target=System.err:默认情况下是:System.out,指定输出控制台

2. FileAppender 选项

  • Threshold=WARN:指定日志消息的输出最低层次。
  • ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
  • File=mylog.txt:指定消息输出到mylog.txt文件。
  • Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

3. DailyRollingFileAppender 选项

  • Threshold=WARN:指定日志消息的输出最低层次。
  • ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
  • File=mylog.txt:指定消息输出到mylog.txt文件。
  • Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
  • DatePattern=''.''yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
  • 1)''.''yyyy-MM: 每月
  • 2)''.''yyyy-ww: 每周
  • 3)''.''yyyy-MM-dd: 每天
  • 4)''.''yyyy-MM-dd-a: 每天两次
  • 5)''.''yyyy-MM-dd-HH: 每小时
  • 6)''.''yyyy-MM-dd-HH-mm: 每分钟

4. RollingFileAppender 选项

  • Threshold=WARN:指定日志消息的输出最低层次。
  • ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
  • File=mylog.txt:指定消息输出到mylog.txt文件。
  • Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
  • MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
  • MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

3. 配置日志信息的格式

其语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

"fully.qualified.name.of.layout.class" 可以指定下面4个格式中的一个:

  1. org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  1. org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

  2. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

  3. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

  4. HTMLLayout 选项
    LocationInfo=true:默认值是false,输出java文件名称和行号
    Title=my app file: 默认值是 Log4J Log Messages.

  5. PatternLayout 选项
    ConversionPattern=%m%n :指定怎样格式化指定的消息。

  6. XMLLayout 选项
    LocationInfo=true:默认值是false,输出java文件和行号

log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n

这里需要说明的就是日志信息格式中几个符号所代表的含义:

  • -X号: X信息输出时左对齐;
  • %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
  • %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
  • %r: 输出自应用启动到输出该log信息耗费的毫秒数
  • %c: 输出日志信息所属的类目,通常就是所在类的全名
  • %t: 输出产生该日志事件的线程名
  • %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
  • %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
  • %%: 输出一个"%"字符
  • %F: 输出日志消息产生时所在的文件名称
  • %L: 输出代码中的行号
  • %m: 输出代码中指定的消息,产生的日志具体信息
  • %n: 输出一个回车换行符,Windows平台为"",Unix平台为""输出日志信息换行
    可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
    1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
    2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
    3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
    4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉

例子:

#控制台输出:
#log4j.rootLogger = INFO,consoleAppender
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Threshold = ERROR
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern =%d %-5p %m %n
log4j.appender.consoleAppender.ImmediateFlush = true

# 直接输出,不进行缓存
log4j.appender.consoleAppender.Target = System.err
# 默认是System.out方式输出

#发送邮件:SMTPAppender
#log4j.rootLogger = INFO,MAIL
log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold = INFO
log4j.appender.MAIL.BufferSize = 10
log4j.appender.MAIL.From = yourmail@gmail.com
log4j.appender.MAIL.SMTPHost = smtp.gmail.com
log4j.appender.MAIL.Subject = Log4J Message
log4j.appender.MAIL.To = yourmail@gmail.com
log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern =%d - %c -%-4r [%t] %-5p %c %x - %m %n

#数据库:JDBCAppender
log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL = jdbc:oracle:thin:@ 210.51 . 173.94 : 1521 :YDB
log4j.appender.DATABASE.driver = oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user = ydbuser
log4j.appender.DATABASE.password = ydbuser
log4j.appender.DATABASE.sql = INSERT INTO A1 (TITLE3) VALUES ( ' %d - %c %-5p %c %x - %m%n ' )
log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern =% d - % c -%- 4r [ % t] %- 5p % c % x - % m % n
#数据库的链接会有问题,可以重写org.apache.log4j.jdbc.JDBCAppender的getConnection() 使用数据库链接池去得链接,可以避免insert一条就链接一次数据库
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,937评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,957评论 0 6
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 3,274评论 0 0
  • 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layo...
    默默守护阅读 1,897评论 2 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139