log4j 配置

DailyRollingFileAppender是日志记录软件包Log4J中的一个Appender,它能够按一定的频度滚动日志记录文件。

如果您不熟悉Log4J,建议阅读一下 使用Log4j进行日志记录

我们可以按下面的方式配置DailyRollingFileAppender:

log4j.rootCategory=INFO,file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.File=run.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=INFO
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%c %x - %m%n   

在DailyRollingFileAppender中可以指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小时)和minutely(每分钟)六个频度,这是通过为 DatePattern选项赋予不同的值来完成的。DatePattern选项的有效值为:

  • '.'yyyy-MM,对应monthly(每月)
  • '.'yyyy-ww,对应weekly(每周)
  • '.'yyyy-MM-dd,对应daily(每天)
  • '.'yyyy-MM-dd-a,对应half-daily(每半天)
  • '.'yyyy-MM-dd-HH,对应hourly(每小时)
  • '.'yyyy-MM-dd-HH-mm,对应minutely(每分钟)

DatePattern中不用处理的文字要放到单引号(')中,如上面的(.)。如果您对此有疑问可以查阅SimpleDateFormat的文档。DailyRollingFileAppender中使用这个类来处理DatePattern。

DatePattern格式化之后的文本作为文件名字的后缀。DailyRollingFileAppender不支持格式化之后的文本作为文件名字的前缀。

DailyRollingFileAppender在每一个日志事件(LoggingEvent)附加(append)之前检查是否需要附加。也就是说如果在一个滚动区间中没有任何日志记录,那么这个区间的日志记录文件就不会形成。

 

在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是java properties(key=value)【Java特性文件(键=值)】。(这里只说明properties文件) 

1、配置根Logger


      其语法为: 
      log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
      level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName:就是指定日志信息输出到哪个地方(这个appenderName其实就是你自己定义的appender的名称)。您可以同时指定多个输出目的地。 
     例如: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:指定可以产生的滚动文件的最大数。 

file的相对路径配置:

1、 web.xml配置 
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
"webapp.root"这个字符串可以随便写任何字符串。如果不配置默认值是"webapp.root"。


可以用System.getProperty("webapp.root")来动态获项目的运行路径。
一般返回结果例如:/usr/local/tomcat6/webapps/项目名


在log4j.properties配置文件,就可以按下面的方式使用${webapp.root}:
 log4j.appender.file.File=${webapp.root}/WEB-INF/logs/sample.log 
就可以在运行时动态的找出项目的路径

3、配置日志信息的格式


        其语法为: 
  1). log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
              "fully.qualified.name.of.layout.class" 可以指定下面4个格式中的一个: 
           1.org.apache.log4j.HTMLLayout(以HTML表格形式布局), 
         2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式), 
         3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 
         4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 
                   1.HTMLLayout 选项 
                      LocationInfo=true:默认值是false,输出java文件名称和行号 
                      Title=my app file: 默认值是 Log4J Log Messages. 
                   2.PatternLayout 选项 
                      ConversionPattern=%m%n :指定怎样格式化指定的消息。 
                   3.XMLLayout  选项 
                      LocationInfo=true:默认值是false,输出java文件和行号 
        2). log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ss} %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字符,就从左边交远销出的字符截掉。


应用实例:

private static Log log = LogFactory.getLog(NetPay99BillGateway.class);
web.xml中:貌似没有也可以打印
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>60000</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

log4j.properties:
#settings for struts
#log4j.logger.org.apache.struts=ERROR
#log4j.logger.org.displaytag=ERROR

#settings for spring
#log4j.logger.org.springframework=ERROR

#settings for ibatis
##log4j.logger.com.ibatis=INFO
##log4j.logger.com.ibatis.common.jdbc.ScriptRunner=INFO
##log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=INFO
##log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=INFO

#settings for sql
#log4j.logger.java.sql=DEBUG,consoleAppender
##log4j.logger.java.sql.Connection=INFO
##log4j.logger.java.sql.ResultSet=INFO
#log4j.logger.java.sql.Statement=DEBUG
#log4j.logger.java.sql.PreparedStatement=DEBUG
通过bean方式:
<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" depends-on="propertyConfigurer">
     <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
     <property name="targetMethod" value="initLogging" />
     <property name="arguments">
      <list>
          <!-- 配置文件位置 -->
       <value>${config_path}/log4j.xml</value>
       <!-- refreshInterval 检查是否配置文件的是否被修改,单位为毫秒-->
       <value>300000</value>
      </list>
     </property>
</bean>

log4j.xml
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
     <param name="Threshold" value="ERROR" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%-d{HH:mm:ss}][newhieght] %p [%t] %c{1}.%M(%L) | %m%n"/>
        </layout>
    </appender>

    <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="Threshold" value="ERROR" />
     <param name="File" value="/logs/newhieght.log" />
     <param name="Append" value="true" />

     <!--   Rollover   at   midnight   each   day   -->
     <param name="DatePattern" value="'.'yyyy-MM-dd" />
   
     <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern"
     value="[%-d{HH:mm:ss}][newhieght] %p [%t] %c{1}.%M(%L) | %m%n" />
     </layout>
    </appender>
    <appender name="PAGE" class="com.newheight.util.PageLogAppender">
        <param name="attrName" value="_pagelogs"/>
        <param name="cookieName" value="showLogs"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n"/>
        </layout>
    </appender>

    <logger name="com.newheight">
        <level value="ERROR"/>
    </logger>
    
    <!-- Suppress success logging from InteractiveAuthenticationSuccessEvent -->
    <logger name="org.acegisecurity">
        <level value="ERROR"/>
    </logger>

    <logger name="com.ibatis">
        <level value="ERROR"/>
    </logger>
    
    <logger name="org.apache">
        <level value="ERROR"/>
    </logger>

    <logger name="org.springframework">
        <level value="ERROR"/>
    </logger>
    
    <logger name="java.sql.PreparedStatement">
        <level value="ERROR"/>
        <appender-ref ref="PAGE"/>
    </logger>

    <logger name="java.sql.Statement">
        <level value="ERROR"/>
        <appender-ref ref="PAGE"/>
    </logger>

    <logger name="java.sql.Connection">
        <level value="ERROR"/>
    </logger>
    
    <logger name="org.quartz">
        <level value="ERROR"/>
    </logger>
    
    <logger name="org.directwebremoting">
        <level value="ERROR"/>
    </logger>
    
    <root>
        <level value="ERROR"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="CONSOLE"/>
    </root>
    
</log4j:configuration>

log4j.property
log4j.rootCategory=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%t] %C.%M(%L) | %m%n %d{yyyy-MM-dd HH:mm:ss,SSS}

log4j.logger.java.sql=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet = debug

log4j.logger.com.yihaodian.front.kernel.spring.YihaodianSplitDbDataSource=ERROR
log4j.logger.com.yihaodian.front=ERROR
log4j.logger.com.yihaodian.channel=debug
log4j.logger.sysLogger=ERROR
log4j.additivity.userLogger=false
log4j.logger.userLogger=ERROR

log4j.xml文件写法

spring+ibatis 输出sql语句 的log4j.xml写法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/ ">

 <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="%d [%t] %p - %m%n" />
  </layout>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
   <param name="LevelMin" value="INFO" />
   <param name="LevelMax" value="FATAL" />
  </filter>
 </appender>

<!-- 正常的日记文件INFO -- WARN --> 

<appender name="Access" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="G:/log/access.log" />
  <param name="Append" value="false" />
  <param name="MaxFileSize" value="1024" />
  <param name="MaxBackupIndex" value="2" />
  <param name="Threshold" value="INFO" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="%d [%t] %p - %m%n" />
  </layout>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
   <param name="LevelMin" value="INFO" />
   <param name="LevelMax" value="WARN" />
   <param name="AcceptOnMatch" value="true" />
  </filter>
 </appender>

<!-- 出错的日记文件ERROR -- FATAL --> 

 <appender name="Error" class="org.apache.log4j.RollingFileAppender">
  <param name="Append" value="false" />
  <param name="File" value="G:/log/error.log" />
  <param name="MaxFileSize" value="1024" />
  <param name="MaxBackupIndex" value="2" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="%d [%t] %p - %m%n" />
  </layout>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
   <param name="LevelMin" value="ERROR" />
   <param name="LevelMax" value="ERROR" />
   <param name="AcceptOnMatch" value="true" />
  </filter>
 </appender>


 <root>
  <appender-ref ref="STDOUT" />
  <appender-ref ref="Access" />
  <appender-ref ref="Error" />
 </root>
</log4j:configuration>

=====================================================================================================

增加一些log内容,ibatis输出sql语句的log.

新增一个appender,这里的filter必需要设置成为DEBUG的level. 设置其他的,不会输出sql语句。

 <appender name="IBatis" class="org.apache.log4j.ConsoleAppender">
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern"
    value="%-4r [%t] %-5p %c %x - %m%n" />
  </layout>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
   <param name="LevelMin" value="DEBUG" />
   <param name="LevelMax" value="DEBUG" />
  </filter>
 </appender>

再增加N个logger.

<logger name="com.ibatis" additivity="true">
  <level value="DEBUG" />
 </logger>
 
 <logger name="java.sql.Connection" additivity="true">
  <level value="DEBUG" />
 </logger>
 
 <logger name="java.sql.Statement" additivity="true">
  <level value="DEBUG" />
 </logger>
 
 <logger name="java.sql.PreparedStatement" additivity="true">
  <level value="DEBUG" />
  <appender-ref ref="IBatis" />
 </logger>
 
 <logger name="java.sql.ResultSet" additivity="true">
  <level value="DEBUG" />
  <appender-ref ref="IBatis" />
 </logger>

上面的logger,也一个都不能少。
<appender-ref ref="IBatis" />指向上面的IBatis,就会和log一起输出,没加<appender-ref ref="IBatis" />标签的,日记里不会显示内容。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,你可以使用Log4j来进行日志记录。下面是配置Spring Boot项目中Log4j的步骤: 1. 首先,确保在项目的pom.xml文件中添加了Log4j的依赖。可以在<dependencies>标签内添加以下内容: ```xml <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> ``` 2. 创建一个log4j.properties或log4j.xml文件,并将其放置在src/main/resources目录下。你可以根据自己的需求选择使用properties文件或者xml文件。 3. 在log4j配置文件中,定义日志输出的格式和位置。你可以设置不同的日志级别,例如DEBUG、INFO、WARN、ERROR等。下面是一个简单的log4j.properties配置示例: ```properties # 设置日志级别为INFO log4j.rootLogger=INFO, 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} %5p %c{1}:%L - %m%n ``` 4. 在Spring Boot应用程序的application.properties或application.yml文件中,添加以下配置,以确保应用程序使用log4j作为日志框架: application.properties: ```properties # 使用log4j作为日志框架 logging.config=classpath:log4j.properties ``` application.yml: ```yaml # 使用log4j作为日志框架 logging: config: classpath:log4j.properties ``` 这样配置后,你就可以在你的代码中使用日志记录了。例如,使用以下代码在类中创建一个Logger对象并使用它进行日志记录: ```java import org.apache.log4j.Logger; public class YourClass { private static final Logger logger = Logger.getLogger(YourClass.class); public void yourMethod() { logger.info("This is an info log message"); logger.error("This is an error log message"); } } ``` 以上就是在Spring Boot中配置Log4j的基本步骤,你可以根据自己的需求进行更高级的配置和定制。希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值