log4j输出日志
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- Appenders 日志信息输出目的地 --> <!-- ConsoleAppender --> <!-- 每个ConsoleAppender都有一个target,表示它的输出目的地。 --> <!-- 它可以是System.out,标准输出设备(缓冲显示屏) --> <!-- 或者是System.err,标准错误设备(不缓冲显示屏) --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%l - %c:%m %d [%-5p]%n" /> </layout> </appender> <!-- RollingFileAppender 回滚文件 --> <!-- Append true,默认每次启动系统,日志继续输出到原来的文件,而不是清空了再来 --> <!-- MaxFileSize 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件 --> <!-- MaxBackupIndex 最多20个 --> <!-- PatternLayout 控制日志输出的格式化,参考上面的那些符合说明,自己怼自己想要的格式。--> <!-- filter 级别范围过滤器 --> <!-- levelMin levelMax 范围 --> <appender name="StreamOperateFile" class="org.apache.log4j.RollingFileAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%l - %c:%m %d [%-5p]%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="INFO" /> <param name="levelMax" value="INFO" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <!-- 下面这些就是根据 这些路径来控制对应包下的文件的日志输出级别,基本上都是报错了,才输出日志 --> <logger name="org.springframework.core"> <level value="error" /> </logger> <logger name="org.springframework.beans"> <level value="error" /> </logger> <logger name="org.springframework.context"> <level value="error" /> </logger> <logger name="org.springframework.http"> <level value="error" /> </logger> <logger name="org.springframework.web"> <level value="error" /> </logger> <logger name="org.elasticsearch.client.transport"> <level value="debug" /> </logger> <logger name="org.springframework.data.mongodb"> <level value="error" /> </logger> <!-- logger 输出级别是info级别及以上的日志,下面的ref关联的两个appender没有filter设置,所以,info及以上的日志都是会输出到这2个appender的 --> <root> <priority value="info" /> <appender-ref ref="console" /> </root> </log4j:configuration> <!-- 格式参数: -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平台为"/r/n",Unix平台为"/n"输出日志信息换行 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 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字符,就从左边较远输出的字符截掉。 -->
import java.text.SimpleDateFormat; import java.util.Date; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.RollingFileAppender; import org.apache.log4j.xml.DOMConfigurator; import org.slf4j.LoggerFactory; public class Log4jTest { // private static org.slf4j.Logger logger = LoggerFactory.getLogger(Log4jTest.class); private static SimpleDateFormat date = new SimpleDateFormat(); public static void main(String[] args) { Logger logger = getLog(Log4jTest.class); logger.debug("This is debug message."); // 记录info级别的信息 logger.info("This is info message."); // 记录error级别的信息 logger.error("This is error message."); } public static Logger getLog(Class<?> clazz) { Logger logger = Logger.getLogger(clazz); // 生成新的Logger logger.removeAllAppenders(); // 清空Appender,特別是不想使用現存實例時一定要初期化 logger.setLevel(Level.DEBUG); // 设定Logger級別。 logger.setAdditivity(true); // 设定是否继承父Logger。默认为true,继承root输出;设定false后将不出书root。 FileAppender appender = new RollingFileAppender(); // 生成新的Appender appender.setFile("D:/"+getTime("yyyy-MM-dd") + ".log"); // log输出路径 appender.setEncoding("UTF-8"); // log的字符编码 appender.setAppend(true); //日志合并方式: true:在已存在log文件后面追加 false:新log覆盖以前的log appender.activateOptions(); // 适用当前配置 PatternLayout layout = new PatternLayout(); layout.setConversionPattern("%l - %c:%m %d [%-5p]%n"); // log的输出形式 appender.setLayout(layout); logger.addAppender(appender); // 将新的Appender加到Logger中 return logger; } private static String getTime(String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(new Date()); } }