<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Log4jTest { static public Logger logger = LoggerFactory.getLogger(Log4jTest.class); public static void main(String[] args) { // System.out.println("This is println message."); // 记录debug级别的信息 logger.debug("This is debug message."); // 记录info级别的信息 logger.info("This is info message."); // 记录error级别的信息 logger.error("This is error message."); } }
问题:html
log4j:WARN No appenders could be found for logger (testSite.Log4jTest). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j.properties 配置文件缺失,即 src/main/resources 下无此文件java
#日志 输出级别 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 或者自定义的级别,Log4j建议只使用中间四个级别。 #第一个参数为 输出 日志级别 ,后面参数为 Appender log4j.rootLogger=DEBUG,console,dailyFile.... # 表示Logger不会在父Logger的appender里输出,默认为true log4j.additivity.org.apache=false
控制台spring
# 控制台(console)# log4j.appender.console=org.apache.log4j.ConsoleAppender # Threshold:指定日志信息的最低输出级别,默认为DEBUG # log4j.appender.console.Threshold=DEBUG # ImmediateFlush:表示全部消息都会被当即输出,设为false则不输出,默认值是true # log4j.appender.console.ImmediateFlush=true # Target:默认值是System.out # log4j.appender.console.Target=System.err #layout log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
文件sql
# 日志文件(logFile)# log4j.appender.logFile=org.apache.log4j.FileAppender # Threshold:指定日志信息的最低输出级别,默认为DEBUG。# log4j.appender.logFile.Threshold=DEBUG # ImmediateFlush:表示全部消息都会被当即输出,设为false则不输出,默认值是true# log4j.appender.logFile.ImmediateFlush=true # Append:true表示消息增长到指定文件中,false则将消息覆盖指定的文件内容,默认值是true# log4j.appender.logFile.Append=true # File:指定消息输出到logging.log4j文件中。# log4j.appender.logFile.File=D:/logs/log.log4j #layout log4j.appender.logFile.layout=org.apache.log4j.PatternLayout log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
天天产生一个日志文件apache
# 按期回滚日志文件(dailyFile)# log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender # Threshold:指定日志信息的最低输出级别,默认为DEBUG。# log4j.appender.dailyFile.Threshold=DEBUG # ImmediateFlush:表示全部消息都会被当即输出,设为false则不输出,默认值是true# log4j.appender.dailyFile.ImmediateFlush=true # Append:true表示消息增长到指定文件中,false则将消息覆盖指定的文件内容,默认值是true# log4j.appender.dailyFile.Append=true # File:指定消息输出到logging.log4j文件中。# log4j.appender.dailyFile.File=D:/logs/log.log4j # DatePattern='.'yyyy-MM:每个月滚动一第二天志文件,即每个月产生一个新的日志文件。 # # 当前月的日志文件名为logging.log4j,前# 一个月的日志文件名为logging.log4j.yyyy-MM。 # # 另外,也能够指定按周、天、时、分等来滚动日志文件,对应的格式以下: # # 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:每分钟 # log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd #layout log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
文件大小到达指定尺寸的时候产生一个新的文件api
# 回滚文件(rollingFile)# log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender # Threshold:指定日志信息的最低输出级别,默认为DEBUG log4j.appender.rollingFile.Threshold=DEBUG # ImmediateFlush:表示全部消息都会被当即输出,设为false则不输出,默认值是true。 log4j.appender.rollingFile.ImmediateFlush=true # Append:true表示消息增长到指定文件中,false则将消息覆盖指定的文件内容,默认值是true log4j.appender.rollingFile.Append=true # File:指定消息输出到logging.log4j文件中 log4j.appender.rollingFile.File=D:/logs/log.log4j # MaxFileSize:后缀能够是KB, MB 或者GB。 # 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中 log4j.appender.rollingFile.MaxFileSize=200KB # 指定能够产生的滚动文件的最大数,例如,设为2则能够产生 log4j.appender.rollingFile.MaxBackupIndex=50 #layout log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
将日志信息以流格式发送到任意指定的地方bash
(1)org.apache.log4j.PatternLayout(能够灵活地指定布局模式)选项:
ConversionPattern=%m%n:设定以怎样的格式显示消息多线程
格式化符号说明: %p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。 %d:输出日志时间点的日期或时间,默认格式为ISO8601,也能够在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。 %r:输出自应用程序启动到输出该log信息耗费的毫秒数。 %t:输出产生该日志事件的线程名。 %l:输出日志事件的发生位置,至关于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。 例如:test.TestLog4j.main(TestLog4j.java:10)。 %c:输出日志信息所属的类目,一般就是所在类的全名。 %M:输出产生日志信息的方法名。 %F:输出日志消息产生时所在的文件名称。 %L::输出代码中的行号。 %m::输出代码中指定的具体日志信息。 %n:输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。 %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤为用到像java servlets这样的多客户多线程的应用中。 %%:输出一个"%"字符。 另外,还能够在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如: 1) c:指定输出category的名称,最小的长度是20,若是category的名称长度小于20的话,默认的状况下右对齐。 2)%-20c:"-"号表示左对齐。 3)%.30c:指定输出category的名称,最大的长度是30,若是category的名称长度大于30的话,就会将左边多出的字符截掉, 但小于30的话也不会补空格。
(2)org.apache.log4j.HTMLLayout(以HTML表格形式布局)选项:
LocationInfo=true:输出java文件名称和行号,默认值是false。
Title=My Logging: 默认值是Log4J Log Messages。app
(3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
(4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)布局
# Output pattern : date [thread] priority category - message FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 log4j.rootLogger=INFO, Console, RollingFile #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] [%X{SEQ}] %l %m%n #RollingFile log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.RollingFile.File=logs/ams.balance.log log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.RollingFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [ %p ] [%X{SEQ}] %l %m%n # SQL \u6253\u5370 log4j.logger.com.jf.ams.bankpage.dao=DEBUG log4j.logger.com.springframework=DEBUG log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=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.org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl=DEBUG
<!-- log4j 配置 开始 --> <context-param> <param-name> log4jConfigLocation </param-name > <param-value> /WEB-INF/classes/log4j.properties </param-value > </context-param> <context-param> <param-name> log4jRefreshInterval </param-name > <param-value> 600000 </param-value > </context-param>