Spring中log4j的使用

3 篇文章 0 订阅

Spring中log4j的使用

常用的日志方式

​ Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging。其中log4j和commons-logging都是apache软件基金会的开源项目。这三种方式的区别如下:

Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包。

log4j,最强大的记录日志的方式。可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。

commons-logging,最综合和常见的日志记录方式,是Java中的一个日志接口,一般会与log4j一起使用。自带SimpleLog可用于日志记录。

log4j配置由三个部分组成

输出级别的种类(level)

​ 日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别:

ERROR、WARN、INFO、DEBUG

ERROR 为严重错误 主要是程序的错误

WARN 为一般警告,比如session丢失

INFO 为一般要显示的信息,比如登录登出

DEBUG 为程序的调试信息

配置日志信息输出目的地(appender)

​ Log4j提供的appender有以下几种:

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(将日志信息以流格式发送到任意指定的地方)

要写日志信息到一个文件中,必须使用org.apache.log4j.FileAppender。有以下FileAppender的配置参数

属性描述
immediateFlush标志的默认设置为true,这意味着输出流的文件被刷新,在每个追加操作
encoding它可以使用任何字符编码。默认情况下是特定于平台的编码方案
threshold这个 appender 阈值级别
Filename日志文件的名称
fileAppend默认设置为true,这意味着记录的信息被附加到同一文件的末尾
bufferedIO此标志表示是否需要写入缓存启用。默认设置为false
bufferSize如果 bufferedI/O 启用,这表示缓冲区的大小,默认设置为8KB

RollingFileAppender的可配置参数除了上面FileAppender已有的以外,还有下面两个

属性描述
maxFileSize上述的文件的回滚临界尺寸。默认值是10MB
maxBackupIndex此属性表示要创建的备份文件的数量。默认值是1

1:org.apache.log4j.RollingFileAppender 这是文件方式的输出,但可能是多个文件。

2:log4j.appender.R.MaxFileSize=1024KB 规定最大到1024K,就生成新文件。

​ log4j.appender.R.MaxBackupIndex=10 最多生成10个,

​ 这种方式下,日志文件名会是:xx.log xx.log.1 xx.log.2……

DailyRollingFileAppender除了有FileAppender已有的以外,还有

Property描述
DatePattern这表示在滚动的文件,并按命名惯例来执行。默认情况下,在每天午夜滚动

DatePattern控制使用下列滚动的时间表方式之一:

DatePattern描述
‘.’ yyyy-MM滚动在每个月的结束和下一个月初
‘.’ yyyy-MM-dd这是默认值,每天午夜滚动
‘.’ yyyy-MM-dd-a滚动每一天的午夜和中午
‘.’ yyyy-MM-dd-HH滚动在每一个小时
‘.’ yyyy-MM-dd-HH-mm滚动在每一个分钟
‘.’ yyyy-ww滚动每个星期取决于区域设置时的第一天

配置日志信息的格式(layout)

​ Log4j提供的layout有以e几种:

1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),

2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

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

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

​ 如果想生成基于模式的特定格式的日志信息,那么可以使用 org.apache.log4j.PatternLayout 格式化日志信息。

PatternLayout类扩展抽象 org.apache.log4j.Layout 类并覆盖format()方法根据提供的模式构建日志信息。

PatternLayout也是一个简单的布局对象,它提供下列Bean属性,可以通过配置文件进行设置:

S.N.属性和说明
1conversionPattern设置转换模式。默认为 %r [%t] %p %c %x - %m%n
模式转换字符:

下表说明了以上模式使用的字符和所有其他字符,可以在自定义模式中使用:

转换字符表示的意思
c用于输出的记录事件的类别。例如,对于类别名称”a.b.c” 模式 %c{2} 会输出 “b.c”
C用于输出呼叫者发出日志请求的完全限定类名。例如,对于类名 “org.apache.xyz.SomeClass”, 模式 %C{1} 会输出 “SomeClass”.
d用于输出的记录事件的日期。例如, %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
F用于输出被发出日志记录请求,其中的文件名
l用于将产生的日志事件调用者输出位置信息
L用于输出从被发出日志记录请求的行号
m用于输出使用日志事件相关联的应用程序提供的消息
M用于输出发出日志请求所在的方法名称
n输出平台相关的行分隔符或文字
p用于输出的记录事件的优先级
r用于输出毫秒从布局的结构经过直到创建日志记录事件的数目
t用于输出生成的日志记录事件的线程的名称
x用于与产生该日志事件的线程相关联输出的NDC(嵌套诊断上下文)
X在X转换字符后面是键为的MDC。例如 X{clientIP} 将打印存储在MDC对键clientIP的信息
%文字百分号 %%将打印%标志
格式修饰符:

默认情况下,相关资料原样输出。然而,随着格式修饰符的帮助下,可以改变最小字段宽度,最大字段宽度和对齐。

下表涵盖了各种各样的修饰符的情况:

Format modifierleft justifyminimum widthmaximum width注释
%20cfalse20none用空格左垫,如果类别名称少于20个字符长
%-20ctrue20none用空格右垫,如果类别名称少于20个字符长
%.30cNAnone30从开始截断,如果类别名称超过30个字符长
%20.30cfalse2030用空格左侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。
%-20.30ctrue2030用空格右侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。

配置文件log4j.properties

1.配置根Logger,其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

如: log4j.rootLogger = debug,stdout,D,E , debug是日志级别, stdout, ,D,E是输出目的地appender,每一个appender会在下面单独配置。

2.配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName = 完全类限定名,如:org.apache.log4j.ConsoleAppender
log4j.appender.appenderName.属性1 = 值1  
…  
log4j.appender.appenderName.属性N = 值N
如:
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

3.配日志信息的格式(layout),如上面最后一行的配置属性ConversionPattern

一个完整的示例

 ### set log levels ###  
log4j.rootLogger = debug,stdout,D,E  

# 控制台输出的配置,所有日志输出,都会显示在控制台
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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n  

# DEBUG级别及以上级别的日志,会写到F://logs/log.log文件中,文件不存在的时候会自动创建
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.D.File = F://logs/log.log  
log4j.appender.D.Append = true  
log4j.appender.D.Threshold = DEBUG   
log4j.appender.D.layout = org.apache.log4j.PatternLayout  
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n  

# ERROR级别及以上级别的日志,会写到F://logs/error.log文件中,文件不存在的时候会自动创建
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.E.File =F://logs/error.log   
log4j.appender.E.Append = true  
log4j.appender.E.Threshold = ERROR   
log4j.appender.E.layout = org.apache.log4j.PatternLayout  
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

# 指定com.neusoft包下的所有类的等级为DEBUG。可以把com.neusoft改为自己项目所用的包名。
log4j.logger.com.neusoft =DEBUG
# 类似其他包也可以针对包指定日志级别
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR

Spring-web项目中使用log4j的步骤

第一步:添加log4j的相关包

第二步:在spring的环境中添加log4j的配置

<context-param>  
        <param-name>webAppRootKey</param-name>  
        <param-value>webapp.root</param-value>  
    </context-param>  

    <context-param>  
        <param-name>log4jConfigLocation</param-name>  
        <param-value>WEB-INF/log4j.properties</param-value>  
    </context-param>  

    <context-param>  
        <param-name>log4jRefreshInterval</param-name>  
        <param-value>3000</param-value>  
    </context-param>  

    <listener>  
        <listener-class>  
            org.springframework.web.util.Log4jConfigListener  
        </listener-class>  
    </listener>  

​ “webapp.root”这个字符串可以随便写任何字符串。如果不配置默认值是”webapp.root”。可以用System.getProperty(“webapp.root”)来动态获项目的运行路径。一般是打包项目的根目录。

第三步:当于就是log4j本身的配置了,上面讲的一大堆都是,log4j.properties.

第四步: 配置好以后日志就跟随web项目窗口启动而启动了,在服务器启动的控制台可以看到日志信息。

在代码中使用的时候如下: Logger类不允许实例化一个新的记录器实例,但它提供了两个静态方法获得一个 Logger 对象:

  • public static Logger getRootLogger();
  • public static Logger getLogger(String name);

此处两种方法的第一个返回应用程序实例根记录器并没有名字。任何其他命名的Logger对象实例是通过第二种方法通过记录器的名称获得。

import org.apache.log4j.Logger;  
private static Logger log = Logger.getLogger(SessionListener.class);  

log.info("SessionListener contextInitialized!"); 
SN方法及描述
1public void debug(Object message)这种方法打印使用 Level.DEBUG 消息级别
2public void error(Object message)这种方法打印使用 Level.ERROR 消息级别
3public void fatal(Object message);这种方法打印使用 Level.FATAL 消息级别
4public void info(Object message);这种方法打印使用 Level.INFO 消息级别
5public void warn(Object message);这种方法打印使用 Level.WARN 消息级别
6public void trace(Object message);这种方法打印使用Level.TRACE消息级别

其他

log4j 的rootLogger与rootCategory的区别

一句话

rootLogger是新的使用名称,对应Logger类

rootCategory是旧的使用名称,对应原来的Category类

log4j日志文件中文乱码处理方法

配置文件中加上这句

log4j.appender.file.encoding=UTF-8

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在pom.xml文件添加log4j2的依赖: ```xml <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.14.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.14.1</version> </dependency> ``` 接着,在resources目录下创建log4j2.properties文件,并进行配置: ```properties #日志级别 log4j.rootLogger=DEBUG,stdout #输出到控制台 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{yyyy-MM-dd HH:mm:ss} [%t] [%p] %m%n #输出到文件 log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=./logs/spring.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] %m%n ``` 最后,在spring的配置文件添加log4j2的配置: ```xml <bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="org.apache.logging.log4j.LogManager" /> <property name="targetMethod" value="getContext" /> <property name="arguments"> <list> <value>false</value> </list> </property> </bean> ``` 这样就完成了spring集成log4j2使用.properties的配置。可以通过调整log4j.properties文件的配置,实现不同的日志输出方式和日志级别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值