`

log日志

    博客分类:
  • java
阅读更多

常用log4j配置

常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子:

最简单的配置是只要取下面的log4j.properties文件中带下划线的四行就行,它完成日志输出到控制台。

一、log4j.properties

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
### 设置com.unmi域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1,A2 ##
log4j.category.com.unmi = ERROR,A1
log4j.category.com.unmi = INFO,A2 
 
### 一般把上面两行写如下方式,统一控制日志输出,再用log4j.logger设置包独立的输出级别 ##
log4j.rootLogger = DEBUG,A1
log4j.logger.com.unmi.special = ERROR
 
### 设置输出地A1,为ConsoleAppender(控制台) ##
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
 
### 设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
 
### 配置日志输出的格式##
log4j.appender.A1.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
 
### 设置输出地A2到文件(文件大小到达指定尺寸的时候产生一个新的文件)##
log4j.appender.A2 = org.apache.log4j.RollingFileAppender
 
### 文件位置##
log4j.appender.A2.File = E:/study/log4j/log.html
 
### 文件大小##
log4j.appender.A2.MaxFileSize = 500KB
 
log4j.appender.A2.MaxBackupIndex = 1
 
##指定采用html方式输出
log4j.appender.A2.layout = org.apache.log4j.HTMLLayout

二、log4j.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j = "http://jakarta.apache.org/log4j/" >
 
    <appender name = "com.unmi.all" class = "org.apache.log4j.RollingFileAppender" >
 
      <!-- 设置 appender Name:com.unmi.all和输出方式:org.apache.log4j.RollingFileAppender -->
       <param name = "File" value = "E:/study/log4j/all.output.log" / ><!-- 设置File参数:日志输出文件名 -->
       <param name = "Append" value = "false" / ><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
       <param name = "MaxBackupIndex" value = "10" / >
       <layout class = "org.apache.log4j.PatternLayout" >
           <param name = "ConversionPattern" value = "%p (%c:%L)- %m%n" / ><!-- 设置输出文件项目和格式 -->
       </layout >
    </appender >
 
    <appender name = "com.unmi.xyz" class = "org.apache.log4j.RollingFileAppender" >
       <param name = "File" value = "E:/study/log4j/xyz.output.log" / >
       <param name = "Append" value = "true" / >
       <param name = "MaxFileSize" value = "10240" / > <!-- 设置文件大小 -->
       <param name = "MaxBackupIndex" value = "10" / >
       <layout class = "org.apache.log4j.PatternLayout" >
           <param name = "ConversionPattern" value = "%p (%c:%L)- %m%n" / >
       </layout >
    </appender >
 
    <logger name = "unmi.log" > <!-- 设置包名限制,即unmi.log域及以下的日志均输出到下面对应的 appender 中 -->
       <level value = "debug" / ><!-- 设置级别 -->
       <appender-ref ref = "com.unmi.xyz" / ><!-- 与前面的配置的 appender name 相对应 -->
    </logger >
 
    <root > <!-- 设置接收所有输出的 appender -->
       <appender-ref ref = "com.unmi.all" / ><!-- 与前面的 appender name 相对应 -->
    </root >
 
</log4j:configuration>

 

三、配置文件加载方法:

对于properties文件,一般都不用手工去加载,由Log4j第一次初始化时自动就加载了

01
02
03
04
05
06
07
08
09
10
11
12
13
import  org.apache.log4j.Logger;
import  org.apache.log4j.PropertyConfigurator;
import  org.apache.log4j.xml.DOMConfigurator;
 
public class Log4jApp {
   public static void main(String[] args) {
        DOMConfigurator.configure("E:/study/log4j/log4j.xml"); //加载.xml文件
       //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件
 
        Logger log = Logger.getLogger("com.unmi.test");
       log.info("测试");
    }
}

四、项目使用log4j

在web应用中,可以将配置文件的加载放在一个单独的servlet中,并在web.xml中配置该servlet在应用启动时候加载。对于在多人项目中,可以给每一个人设置一个输出通道,这样在每个人在构建Logger时,用自己的域名称,让调试信息输出到自己的log文件中。
五、常用输出格式

%c   列出logger名字空间的全称,如加上{<层数>}表示出从最内层算起的指定层数的名字空间
%X  按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。
%p  日志信息级别
%d   %d{<日期格式>}:日志信息产生时间,使用ISO8601定义的日期格式
%C   日志信息所在地(全限类名)
%m   产生的日志具体信息
%n    输出日志信息换行
%F 显示调用logger的源文件名
%l     输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
%L    显示调用logger的代码行
%M   显示调用logger的方法名
%r     显示从程序启动时到记录该条日志时已经经过的毫秒数
%t     输出产生该日志事件的线程名
%% 显示一个百分号


补充:在配置文件中可以用变量用于引用系统属性,如

 

log4j.appender.A2.File = ${user.home}/${app.name}.log
如果你在启动程序时加了 -Dapp.name=UnmiLog4jTest  JVM 参数,或者在初始化 Log4j 之前,往 System.getProperties() 中 put 了 "app.name" 属性为 UnmiLog4jTest,那么就会输出日志文件到用户主目录/UnmiLog4jTest.log。user.home 属性一般都存在于系统属性中,你也可以在程序中改变它。

如果在 web.xml 中初始化 log4j,你可以在 log4j 的配置文件中更轻松的取到 web 应用的绝对路径。

SLF4J 的几种实际应用模式--之二:SLF4J+Logback

前面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是 LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会觉得惊讶了。LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱,它还被作者认定为 Log4J 的继任者。

为什么叫做 Logback,我就不知道了,反正不要叫做 Brokeback 就行。这里是推崇用 Logback 替代 Log4J 的十几个理由:Reasons to prefer logback over log4j,说的大至是更快;好测试;与 SLF4J 关系紧;文档丰富;能自动加载配置文件;多个 JVM 写一个日志文件,或其他 I/O 错误时不影响程序执行;配置文件中加入条件控制;强大的日志过滤;更强的日志切分功能;自动压缩、删除日志文件;异常栈中更多的数据信息。

Logback 分为三个模块:logback-core,logback-classic,logback-access。logback-core 是核心;logback-classic 改善了 log4j,且自身实现了 SLF4J API,所以即使用 Logback 你仍然可以使用其他的日志实现,如原始的 Log4J,java.util.logging 等;logback-access 让你方便的访问日志信息,如通过 http 的方式。

还得提一点,Logback 能更好的放到 OSGI 环境中。好了,简单绍完了 Logback,就来看看具体怎么用它。

需要的配置文件和组件包,下面三个 jar 文件和一个 xml文件都是要放在项目的 ClassPath 上。

1. slf4j-api-1.5.11.jar
2. logback-core-0.9.20.jar
3. logback-classic-0.9.20.jar
4. logback.xml 或 logback-test.xml (类似于 log4j.properties/log4j.xml)

前一个包在 http://www.slf4j.org/download.html 处下载,第二第三个包在 http://logback.qos.ch/download.html 下载,可能包文件名中的版本号有些差,不要紧。由于这里不演示 HTTP 访问日志信息,所以不需要用到 logback-access-0.9.20.jar。

Logback 先找 logback-test.xml,没有则找 logback.xml 文件,都找不到就使用 BasicConfigurator 基本配置,BasicConfigurator 就是相当于等会贴出的 logback.xml 文件内容的配置。这里我们用 logback.xml 配置文件,以前的 log4j.properties  文件可以用 PropertiesTranslator 转换成 logback.xml 文件内容。

下面是一个最简单的 logback.xml 文件内容

01
02
03
04
05
06
07
08
09
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
      <encoder charset="GBK">
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
      </encoder>
  </appender
 
  <root level="DEBUG">
    <appender-ref ref="stdout" />
  </root>
</configuration>

在 log4j.xml 能做的配置,logback.xml 中也能做到,而且还增强了诸如 <if><then><else>、<filter>、<sift> 等更强的控制,请参考 logback 的手册 http://logback.qos.ch/manual/index.html

使用 Logback  的代码

01
02
03
04
05
06
07
08
09
10
11
12
package com.unmi;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class TestLogback {
    private static final Logger logger = LoggerFactory.getLogger(TestLogback.class);
 
    public static void main(String[] args) {
        logger.info("Hello {}","TestLogback");
    }
}

可以看到与使用 SLF4J 的代码没有任何区别,因为本来用的通用日志框架就是 SLF4J,说到底,这里的 Logback 就相当于 SLF4J+Log4J 使用方式中的 Log4J 绑定和 Log4J 的功能。

执行上面的代码,输出:

21:38:43.031 [main] INFO  com.unmi.TestLogback - Hello TestLogback

还是和上次一样,这里就拿 SLF4J+Logback 和 SLF4J+Log4J 两种方式作下比较:

SLF4J+Logback 组合 对比 SLF4J+Log4J 组合
slf4j-api-1.5.11.jar 一样的,定义高层 API slf4j-api-1.5.11.jar
logback-classic-0.9.20.jar 都是用绑定,
左边这里用作
Logback 绑定
slf4j-log4j12-1.5.11.jar
logback-classic-0.9.20.jar 左边这里用作
日志实现
log4j-1.2.15.jar
logback-test.xml/logback.xml 相当,logback 增加
了 log4j
log4j.properties/log4j.xml
程序代码中:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

 

Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
logger.info("Hello {}","SLF4J");

完全一样,实质上只是
SLF4J API
侵入到了应用组件
中了,与 Logback
没有关系。
程序代码中:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

 

Logger logger = LoggerFactory.getLogger(TestLogback.class);
logger.info("Hello {}","Logback");

通过上面我们更清楚的发现,SLF4J+Logback 这样的组合与 SLF4J+Log4J 这样的用法其实没有什么差异。SLF4J 在使用其他日志实现框架的时候都是 SLF4J+相应绑定+日志实现,这里缩写成的 SLF4J+Log4J,中间是有一个 SLF4J 到 Log4J 的绑定的。完整表述它们就是:

SLF4J+Log4J 的方式:    slf4j-api-1.5.11.jar + slf4j-log4j12-1.5.11.jar + log4j-1.2.15.jar
SLF4J+Logback 的方式:slf4j-api-1.5.11.jar + logback-classic-0.9.20.jar + logback-classic-0.9.20    前一个 logback-classic-0.9.20.jar 是作为绑定用的,后一个是作为日志实现用的,也就是 logback-classic-0.9.20.jar 把前面的 slf4j-log4j12-1.5.11.jar 和 log4j-1.2.15.jar 两个包的功能揉合在了一起。

搞明白了 Logback 在其中所担当的角色后,我们就知道,说使用了 Logback 应用组件,实际它们所用的统一日志组件只是 SLF4J。也可以说 Logback 就是 Log4J 那样,只是自身带了绑定的日志实现。

在 Logback 官方首页 http://logback.qos.ch/ 面中可以看到使用了 Logback 的项目。

分享到:
评论

相关推荐

    .log文件,log日志文件供下载开发测试

    《深入理解.log日志文件及其在开发测试中的应用》 .log文件是计算机系统中常见的日志文件格式,广泛应用于各种软件、服务器和操作系统中,用于记录系统运行过程中的事件、错误、警告和其他相关信息。在本篇文章中,...

    hana log日志空间占满处理.pdf

    当遇到"HANA log日志空间占满"的问题时,需要采取特定的步骤来处理,避免对系统造成灾难性的后果。以下是对标题和描述中所述知识点的详细解释: 1. **日志空间的重要性**: HANA的日志空间主要用于存储数据库的...

    超好用的C# Log日志控件

    "超好用的C# Log日志控件"是一个专门针对C#设计的日志管理工具,通过简单地引用DLL库,开发者可以方便地在项目中集成日志功能,而无需从头编写复杂的日志处理代码。 首先,日志控件的核心功能是提供记录、分类和...

    idea 控制台log日志颜色修改

    "idea 控制台log日志颜色修改"这个主题,正是关于如何通过GrepConsole插件在IDEA中自定义控制台日志的颜色,以便更直观地识别和分析不同类型的日志信息。 GrepConsole是一款非常实用的IDEA插件,它允许用户根据日志...

    Log日志分析源码

    在Android系统中,Log日志分析是一个至关重要的环节,它能帮助开发者跟踪应用程序的运行状态,定位和解决潜在的问题。本文将深入探讨"Log日志分析源码",特别是Log.java的底层JNI(Java Native Interface)代码程序...

    Android-AndroidLog日志打印输出到文件方便查看和上传到服务器

    标题"Android-AndroidLog日志打印输出到文件方便查看和上传到服务器"所描述的,就是一种将Android应用的日志信息写入到本地文件的方法,以便后续分析或上传到远程服务器。这个方法能够帮助开发者在无法直接访问设备...

    用c++写的 log 日志文件

    此外,C++标准库并没有提供内置的日志框架,但在实际开发中,很多开发者会使用第三方库,如Glog、spdlog等,它们提供了更强大、更灵活的功能,例如异步日志处理、自定义格式化和日志过滤等。 总之,通过理解日志...

    Oracle DG下修改redo log和standby redo log日志大小.txt

    Oracle DG下修改redo log和standby redo log日志大小.txt

    c#log日志类和日志分析器(源码)

    本文将深入探讨“c# log日志类和日志分析器”的相关知识点,包括日志的创建、存储、分析以及提供的源码在实际项目中的应用。 首先,让我们了解什么是日志。日志是程序运行过程中产生的事件记录,这些记录包含了...

    java 生成批量log日志

    利用java代码实现 生成批量log日志文件

    C#的LOG日志读写操作

    在提供的压缩包文件中,可能包含了一个名为`log`的文件,这可能是日志文件的实例,或者是实现了日志功能的代码文件。如果它是代码文件,你可能需要查看其具体的实现方式,理解作者如何处理日志读写接口以及路径设置...

    c++ 打印log 日志到文件

    本教程将深入探讨如何在C++中创建一个能够打印log到文件的系统,同时具备删除旧日志和设定日志文件大小的功能。 首先,我们需要理解日志的基本概念。日志通常包含程序运行过程中的信息,如错误信息、警告消息、调试...

    Android LOG日志抓取工具

    "Android LOG日志抓取工具"就是为了解决这个问题而设计的,它能够帮助开发者更有效地捕获和分析应用程序中的异常日志。下面我们将深入探讨这个工具的工作原理、使用方法以及其在实际开发中的价值。 1. **日志系统...

    g3log 日志管理

    **g3log 日志管理详解** g3log是一款高效、可靠且高度可定制的日志管理系统,主要用于在C++应用程序中实现日志记录功能。它的设计目标是提供无锁的日志写入,确保在多线程环境下的性能和安全性。由于其稳定性和成熟...

    log日志组件总结

    本文将深入探讨Java中的log日志组件,包括JDK内置的日志(jdkLog)、Apache的Commons Logging(commonLog)以及流行的log4j。了解这些组件的特点和用法,将提升你对Java日志处理的理解。 首先,我们来看看JDK内置的...

    c# log日志demo

    "c# log日志demo"这个项目显然是一个C#实现的日志功能示例,下面我们将深入探讨其中涉及的知识点。 1. **日志框架**: C#中有多种日志框架可供选择,如Log4Net、NLog、Serilog等。这些框架提供了丰富的配置选项和...

    超实用的android自定义log日志输出工具类

    android自定义log日志输出工具,该工具类具有以下优点: 1 在LogUtlis方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名。 如 : LogUtils.i(this,”这是一个实用的日志...

    access_log日志分析

    apache的默认日志文件分析,用于IP统计访问量,查看某一时间段的ip连接数

    log日志用来打印错误信息的

    在IT行业中,日志(Log)是记录程序运行过程中各种事件的一种重要手段,尤其是用于捕捉和分析错误信息。Log4j是Apache组织提供的一款广泛应用于Java环境的日志处理框架,它为开发者提供了灵活且强大的日志记录功能。...

    MFC工程项目中打印log日志

    在MFC(Microsoft Foundation Classes)工程中,打印log日志是一项重要的任务,它有助于开发者在程序运行过程中跟踪错误、调试代码以及记录系统行为。本文将详细介绍如何在MFC项目中实现这一功能,以便初学者更好地...

Global site tag (gtag.js) - Google Analytics