代码先锋网 代码片段及技术文章聚合

log4j2.xml文件讲解和在日志中加入全局guid

<Configuration status="WARN" monitorInterval="30">
    <Appenders>
    	<!-- 输出到控制台 -->
        <Console name="STDOUT" target="SYSTEM_OUT">
        	<!-- 
        	   %d 日期
        	   %p 日志级别
        	   %c 输出所属的类目,通常就是所在类的全名 
        	  [%t] 线程
        	   - %m 输出代码中指定的消息
        	   %n  换行
        	   %L : 日志输出所在行数
               %M : 日志输出所在方法名
        	 -->
           <PatternLayout pattern="%d %p %c [%t] - %m%n"/>
        </Console>

		<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份-日建立的文件夹下面并进行压缩,作为存档 -->
		<RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
			filePattern="${sys:user.home}/logs/provider/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
			<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
			<Policies>
				 <SizeBasedTriggeringPolicy size="100 MB" />
				 <!-- 切割文件的话最多切割多少个 -->
				 <DefaultRolloverStrategy max="20"/>
			</Policies>
		</RollingFile>
		
		<!-- 按照天来存储,过了这天的东西会被保存为压缩包,并且配置了大小分割 -->
		<RollingFile name="InfoFileAppender" fileName="${sys:user.home}/logs/info.log"
                     filePattern="${sys:user.home}/logs/provider/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="%d %-5p %c:%L [%t] - %m%n"/>
            <Policies>
            	<!-- 时间滚动策略,默认1小时 -->
                <TimeBasedTriggeringPolicy modulate="true" interval="24"/>
            </Policies>
        </RollingFile>
        
       
    </Appenders>
 
	<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <Loggers>
    	<Logger name="com.opensymphony.xwork2.ognl.OgnlValueStack" level="ERROR"/>
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <Logger name="net.sf.ehcache" level="INFO"/>
        <Logger name="com.alisoft.xplatform.asf" level="WARN"/>
        <Logger name="com.mbi" level="ERROR"/>
        <Logger name="net.mlw" level="INFO"/>
        <Logger name="java.sql" level="INFO"/>
        <Logger name="org.hibernate.type" level="ERROR"/>
        <Logger name="com.opensymphony.webwork" level="ERROR"/>
        <Logger name="org.apache" level="INFO"/>
        <Logger name="org.jgroups" level="WARN"/>
        <Logger name="org.jboss.axis" level="INFO"/>
        <Logger name="org.jboss.management" level="INFO"/>
        <Logger name="org.apache.commons.httpclient" level="ERROR"/>
        <Logger name="org.springframework" level="INFO"/>
        <Logger name="org.springboot" level="INFO" />

		<!-- 缺省日志级别,如果package有定制级别,则按package的定制级别走,即使package级别更低 -->
        <Root level="INFO">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="RollingFileInfo"/>
            <!-- <AppenderRef ref="InfoFileAppender"/> -->
        </Root>
    </Loggers>
    
</Configuration>

<AppenderRef ref="STDOUT"/>

只有定义了这个,上面的才会真实有效,

日志信息输出到文件中,超过指定大小压缩存档

日志信息输出到文件中,按照日期来压缩存档

2.想在日志中加入全局guid需要修改日志的格式,加入自定义参数H

<PatternLayout pattern="%d %-5p %c:%L [%t] -%H %n"/>
/**
 * 有时候需要在日志中实现类似aop的效果,统一加进去某些参数。对于这种需要,log4j2则可以使用插件机制
 * Plugin 表示的是这是一个插件,name是名称,category为PatternConverter.CATEGORY(目前插件只有这个选择)
   ConverterKeys表示的就是自定义的参数,可以多个
 * @author yp-tc-m-7129
 *
 */
@Plugin(name = "LogPatternConverter", category = PatternConverter.CATEGORY)
@ConverterKeys({ "H" })
public class LogPatternConverter extends LogEventPatternConverter {
	
	/**
	 * 检查全局guid是否正确 - GUID[45a696c385f341efbebf05fd0b3b1344] - TYPE[MANUAL] 
	 * @param args
	 */
	/*public static void main(String[] args) {
		System.out.println(getPayplusLogUUID());
	}*/
	
	private static final LogPatternConverter INSTANCE = new LogPatternConverter();

    public static LogPatternConverter newInstance(final String[] options) {
        return INSTANCE;
    }

    private LogPatternConverter(){
        super("LogId", "logId");
    }

	/**
	 * 另外的格式化日志,在日志中加入一个全局guid
	 * 这里有两个参数,LogEvent是系统已经存在的一些可选数据,StringBuilder 表示的是最终的输出字符流。一般都是将自定义的append进去
	 */
	@Override
	public void format(LogEvent event, StringBuilder builder) {
		final Message msg = event.getMessage();
		if (msg != null) {
			String result = msg.getFormattedMessage();
			result = getPayplusLogUUID() + result;
			builder.append(result);
		}
	}
	
	/**
	 * 业务日志全局UUID
	 *
	 * @return
	 */
	protected  String getPayplusLogUUID() {
		StringBuilder builder = new StringBuilder();
		if (!ThreadContextUtils.contextInitialized()) {
			ThreadContextUtils.initContext("applicationName", null, ThreadContextType.MANUAL);
		}
		builder.append("- GUID[");
		builder.append(ThreadContextUtils.getContext().getThreadUID());
		builder.append("] - TYPE[");
		builder.append(ThreadContextUtils.getContext().getType());
		builder.append("] ");
		return builder.toString();
	}

}
这样就在日志中加入了全局guid用于查询日志处理问题了。

版权声明:本文为zhangxiaomin1992原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangxiaomin1992/article/details/80676699

智能推荐

log4j2.xml

简单配置 Appenders:记录方式(Console/ RollingFile / RollingRandomAccessFile) Console :将日志在控制台输出 RollingFile:将日志输出到文件中 PatternLayout:日志输出的格式 Loggers:日志定义 logger :起过滤作用,用name指定包名,level指定级别,日志级别之下不输出 root :level属...

log4j2.xml

 ...

log4j2.xml

点击查看log4j2.xml官方文档 标准log4j2.xml...

log4j2.xml配置

log4j2.xml配置...

log4j2.xml配置

  PatternLayout自定义日志布局:  ...

猜你喜欢

log4j2.xml 配置

                                  捐助开发者 在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和Pay...

log4j2.xml

log4j2是log4j的升级版,略有差异,使用方式不变,引入依赖和配置有所区别 配置文件名称改为log4j2.xml,也放在resources目录下,默认读取 配置 依赖(也只需要引入这一个依赖桥接包即可)...

log4j2.xml

日志级别 trace:追踪,就是程序推进一下,可以写个trace输出 debug:调试,一般作为最低级别,trace基本不用。 info:输出重要的信息,使用较多 warn:警告,有些信息不是错误信息,但也要给程序员一些提示。 error:错误信息。用的也很多。 fatal:致命错误。级别较高,这种级别不用调试了,重写吧…… 机制:如果一条日志信息的级别大于等于配置文件...

1.std::for_each

 for_each,允许对区间内的元素进行修改,当然transform也可以实现相同的操作,只是transform效率较低,因为transform是通过拷贝函数返回值实现。当然C++11之后for_each变得不再重要,因为range-based for更加直观简单。 接下来我们看一下for_each的实现: 通过源码可以清晰的看出for_each有三个参数,前两个参数用来确定一个区间,...