首页天道酬勤,

,

张世龙 05-12 10:31 86次浏览

本文转载自https://www.cn blogs.com/y wlaker/p/6124067.html

一、log4j的基本使用方法

首先,配置log4j的jar,maven项目配置以下依赖关系,非maven项目从maven仓库下载jar并将其添加到" build path "中

然后,在src/main/java目录中,在软件包的根classpath上创建新的log4j.properties文件

最后,创建一个新的Main.java文件

执行main方法时,会出现日志信息

二. log4j.properties路径

log4j.properties放在哪里,如何配置才能解析? 配置方法因工程类型而异

1、普通java或spring项目

这是最常见的java工程类型,经常用于编写demo。 将log4j.properties放在src/main/java目录(软件包的根目录)中即可

2、spring mvc项目

在web项目中,更多的是用spring mvc构建。 将log4j.properties放置在src/main/resources的conf目录(web项目配置文件通常为resources或WEB-INF目录)中,编辑并添加web.xml

3、普通网络项目

如何在没有spring提供的监听器的情况下加载log4j.properties? 同样,将log4j.properties放在src/main/resources的conf目录中,然后在servlet中加载

编辑、添加web.xml

看了看是否像spring mvc,你也想了。 因为常规java工程没有指定log4j.properties路径,所以表示log4j的jar包始终具有缺省路径。 此外,建议您首先配置log4j。 这是因为随后加载其他组件时,将开始使用日志记录

现在可以在不同类型的java项目中进行日志记录,但所有java项目都是控制台日志,输出内容也很有限。 详细说明log4j.properties的内容是如何配置的

三. log4j.properties的内容

接下来介绍的内容看起来是独立的,但其实是相互关联的,非常规则。 要输出日志,首先需要日志对象(logger )。 在中,必须设置这些日志对象将日志输出到何处,控制台是文件,它是输出到) appender。 输出的格式和内容是什么样的,需要设定输出样式(layout )。

在此之前,首先介绍log4j日志级别的概念。 日志级别是日志的重要程度。 log4j日志分为七个级别: ALL、DEBUG、INFO、WARN、ERROR、FATAL和OFF。 分级是为了设定日志输出的阈值,只有这个阈值以上的级别

1、logger

登录实例是在代码中实例化的Logger对象

这是全局日志程序配置,LEVEL用于设置日志级别,appenderName定义日志输出设备。 示例中的“控制台”是日志输出装置

以下示例说明如何配置com.demo.test包以封装在所有类中实例化的Logger对象

2、appender

指定日志输出器、logger的输出处

appender有五个选择

每个appender都有几个配置项,下面将分别介绍

控制台应用程序(常用) )

文件应用程序

DailyRollingFileAppender (

滚动文件应用程序

3、layout

指定logger的输出内容和格式

layout有四种选择

layout也有设定项目,具体介绍一下

HTMLLayout

PatternLayout (最常见的配置) ) ) ) ) ) )。

格式的参数说明如下

四. log4j完整配置示例

介绍完log4j.properties的内容后,请配置常用的日志输出

控制台控制台日志输出

文件日志文件日志输出器

滚动文件滚动滚动文件日志输出

定期滚动文件的日期文件日志输出

五. log4j本地日志配置

上述所有配置都是全局的,整个项目的代码使用相同的配置,意味着所有日志都输出到相同的位置。 无法直接查看数据库访问日志、用户登录日志和操作日志。 由于它们混合存在,因此必须为包甚至类配置单独的日志输出。 以下示例显示了“com.demo.test”包的日志输出器

虽然可以让同一类输出不同的日志,但为此,必须在此类中实例化两个logger

然后分别配置

p>

六、slf4j与log4j联合使用

slf4j是什么?slf4j只是定义了一组日志接口,但并未提供任何实现,既然这样,为什么要用slf4j呢?log4j不是已经满足要求了吗?

是的,log4j满足了要求,但是,日志框架并不只有log4j一个,你喜欢用log4j,有的人可能更喜欢logback,有的人甚至用jdk自带的日志框架,这种情况下,如果你要依赖别人的jar,整个系统就用了两个日志框架,如果你依赖10个jar,每个jar用的日志框架都不同,岂不是一个工程用了10个日志框架,那就乱了!

如果你的代码使用slf4j的接口,具体日志实现框架你喜欢用log4j,其他人的代码也用slf4j的接口,具体实现未知,那你依赖其他人jar包时,整个工程就只会用到log4j日志框架,这是一种典型的门面模式应用,与jvm思想相同,我们面向slf4j写日志代码,slf4j处理具体日志实现框架之间的差异,正如我们面向jvm写java代码,jvm处理操作系统之间的差异,结果就是,一处编写,到处运行。况且,现在越来越多的开源工具都在用slf4j了

那么,怎么用slf4j呢?

首先,得弄到slf4j的jar包,maven依赖如下,log4j配置过程完全不变

然后,弄到slf4j与log4j的关联jar包,通过这个东西,将对slf4j接口的调用转换为对log4j的调用,不同的日志实现框架,这个转换工具不同

当然了,slf4j-log4j12这个包肯定依赖了slf4j和log4j,所以使用slf4j+log4j的组合只要配置上面这一个依赖就够了

最后,代码里声明logger要改一下,原来使用log4j是这样的

现在要改成这样

依赖的Logger变了,而且,slf4j的api还能使用占位符,很方便

,