PatternLayout可用的格式化字符:
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间 %t 输出当前线程名称 %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补空格 %logger 输出logger名称,因为Root Logger没有名称 %msg 日志文本 %n 换行 %F 输出所在的类文件名,如Client.java %L 输出行号 %M 输出所在方法名 %C 产生log事件的java完全限定类名 %l 输出语句所在的行数, 包括类名、方法名、文件名、行数输出到文件:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger - %msg%n"/> </Console> <File fileName="logs/app.log" append="false"><!--默认以当前项目为相对路径--> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger - %msg%n"/> </File> </Appenders> <Loggers> <Root level="all"> <AppenderRef ref="Console"/> <AppenderRef ref="fileAppender"/><!--一个logger可配置对个appender输出到不同位置--> </Root> </Loggers> </Configuration> <!--File属性: name用于给appender指定名字,以便logger引用 fileName默认以当前项目为相对路径 append参数表示是否将是追加到文件末尾 默认为true 为false即直接覆盖原文件-->上面的配置会将所有日志输出到同一个文件,随着时间的推移该文件会越来越大,甚至无法打开,但是实际有用的日志都是近期的产生的,太久远的日志大多数是无用的,这就用到了滚动日志,其可以帮助我们实现日志文件的切割,以及无用日志的删除操作;
滚动日志配置: <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <!--自定义属性信息--> <properties> <property>logs</property> <property>applog</property> </properties> <Appenders> <Console target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!--滚动日志配置 filePattern用于设置滚动文件的命名规则 若以.zip为结尾则会自动归档日志文件 也支持其他的格式.gz, .zip, .bz2, 等--> <RollingRandomAccessFile fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> <Policies> <!--滚动时间间隔 该参数需结合filePattern中的时间格式 此时表示为1分钟更换一个新文件 若时间格式为%d{yyyy-MM-dd HH}则表示每小时更换一个新文件--> <TimeBasedTriggeringPolicy interval="1"/> <!--单个日志文件最大容量 --> <SizeBasedTriggeringPolicy size="1 MB"/> </Policies> <!--最大保留的日志文件个数 默认为7个 --> <DefaultRolloverStrategy max="20"/> </RollingRandomAccessFile> </Appenders> <Loggers> <Root level="all"> <AppenderRef ref="RollingAppender"/> </Root> </Loggers> </Configuration>上述配置的整体含义:统一使用rootLogger,所有级别日志都会被记录到文件中,文件位于项目目录下的logs中,当单个文件超过1MB或是时间超过1分钟后则更换日志文件,最多保存20个日志文件;
补充:RollingFile也是做滚动日志的,但是据官方说效率没有RollingRandomAccessFile;
Loggers节点:需求:某个类或模块中产生的需要同时输出到控制台和文件,其他模块则仅输出到控制台,当遇到类似需求时,就需要定义不同的logger了,然后在程序中根据名称获取所需的logger
如果在配置中找不到名称匹配的logger时使用rootLogger;
logger配置:
注意:appender使用的还是上面的例子中的
<Loggers> <Root level="all"> <AppenderRef ref="Console" /> </Root> <Logger level="all" additivity="false"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingAppender" /> </Logger> </Loggers> <!-- additivity表示是否将日志传递给root继续输出 默认为true-->