log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p - %c#%M %x - %m (%r ms)%n
log4j.logger.com.company.project=DEBUG
#SqlMap logging configuration...
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
log4j.logger.com.ibatis.common.util.StopWatch=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.struts.action.RequestProcessor=ERROR
#log4j.logger.org.apache.commons.beanutils.PropertyUtils=DEBUG
#log4j.logger.org.apache.commons.beanutils.BeanUtils=DEBUG
#log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=DEBUG
#log4j.logger.org.apache.struts.action=DEBUG
#log4j.logger.org.apache.commons.beanutils=DEBUG
#log4j.logger.org.springframework.orm.ibatis=DEBUG
#log4j.logger.org.springframework.jdbc=DEBUG
如何使用log4j记录操作员的登录ID:在记录日志的时候,我们可能有这种需求,对于每个记录除了知道日志信息外,也要当前登录用户的信息。可以:使用log4j的 MDC解决这个问题。
- 1, 通过filter或者自己在Action中通过命令MDC.put("userId",DEFAULT_USERID);向MDC设置值。
- 2, 在log4j的配置文件中通过[%X{userId}]提取出用户设置的值并输出到日志,如下
- log4j.appender.layout.ConversionPattern=%d [%t] %-5p - %c#%M %x - %m (%r ms)%n [%X{userId}]
slf4j
服务进入时
MDC.put("tracenum", costLogTrackDTO.getTrackNo());
服务退出时
MDC.remove("tracenum");
日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="log.base" value="." />
<appender name="connect.stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8"> <!-- encoder 可以指定字符集,对于中文输出有意义 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%X{tracenum}] [%logger:%line] - %msg%n
</pattern>
</encoder>
</appender>
<appender name="connect.file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>log/connect.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/connect.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%X{tracenum}] [%logger:%line] - %msg%n</pattern>
</encoder>
</appender>
<appender name="connect.exception.file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>log/connectException.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/connectException.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%X{tracenum}] [%logger:%L] - %msg%n</pattern>
</encoder>
</appender>
<appender name="eaibf.file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>log/eaibapi.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/eaibapi.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>12</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level][%X{tracenum}][%logger] - %msg%n</pattern>
</encoder>
</appender>
<appender name="cos_wtc.file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>log/cos_wtc.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/cos_wtc.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%X{tracenum}] [%logger] - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.bizprocess.main.cosh.handler" level="DEBUG" additivity="false">
<appender-ref ref="connect.stdout"/>
<appender-ref ref="connect.file" />
</logger>
<logger name="com.common.eaib.handler" level="DEBUG" additivity="false">
<appender-ref ref="connect.stdout"/>
<appender-ref ref="connect.file" />
</logger>
<logger name="com.eai.security" level="DEBUG" additivity="false">
<appender-ref ref="eaibf.file" />
</logger>
<logger name="com.eai.api.EAIBDataProcessor" level="DEBUG" additivity="false">
<appender-ref ref="eaibf.file" />
</logger>
<logger name="com.eai.pack" level="DEBUG" additivity="false">
<appender-ref ref="eaibf.file" />
</logger>
<logger name="java.sql.PreparedStatement" additivity="false">
<level value="WARN" />
</logger>
<logger name="java.sql.Connection" additivity="false">
<level value="WARN" />
</logger>
<logger name="java.sql.Statement" additivity="false">
<level value="WARN" />
</logger>
<logger name="org.springframework" additivity="false">
<level value="WARN" />
</logger>
<!-- cos_wtc日志输出 -->
<logger name="com.wtc.ejb" level="DEBUG" additivity="false">
<appender-ref ref="connect.stdout" />
<appender-ref ref="cos_wtc.file" />
</logger>
<!-- 输出cos系统日志 -->
<logger name="com.connect" level="INFO" additivity="false">
<!--打版本时注意一定要去掉connect.stdout配置,否则日志会打到控制台 -->
<appender-ref ref="connect.stdout"/>
<appender-ref ref="connect.file"/>
<appender-ref ref="connect.exception.file"/>
</logger>
<!-- 输出cos系统日志 -->
<logger name="com" level="INFO" additivity="false">
<!--打版本时注意一定要去掉connect.stdout配置,否则日志会打到控制台 -->
<appender-ref ref="connect.stdout"/>
<appender-ref ref="connect.file" />
<appender-ref ref="connect.exception.file" />
</logger>
<root>
<level value="INFO"/>
<!--打版本时注意一定要去掉connect.stdout配置,否则日志会打到控制台 -->
<appender-ref ref="connect.stdout"/>
<appender-ref ref="connect.file" />
<appender-ref ref="connect.exception.file" />
</root>
</configuration>