9.4.0Storm实现日志自定义输出

Storm实现日志自定义输出

一、       配置work.xml

                在storm安装目录下的log4j2目录下的work.xml文件进行自定义文件配置:

        1. 在appenders标签下增加RollingFile

    <RollingFilename="ALERT"  fileName="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.alert.log"               filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.alert.log.%i.gz">
        <PatternLayout>
            <pattern>${patternDetail}</pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicysize="500 MB"/> <!-- Or every 100 MB -->
        </Policies>
        <DefaultRolloverStrategymax="30"/>
    </RollingFile>

    <RollingFilename="PERFORM"
                   fileName="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.performance.log"
                filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.performance.log.%i.gz">
        <PatternLayout>
           <pattern>${patternDetail}</pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicy size="500MB"/> <!-- Or every 100 MB -->
        </Policies>
        <DefaultRolloverStrategymax="30"/>
    </RollingFile>

    <RollingFile name="ERROR"
               fileName="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.error.log"
               filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.error.log.%i.gz">
        <PatternLayout>
           <pattern>${patternDetail}</pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicysize="500 MB"/> <!-- Or every 100 MB -->
        </Policies>
        <DefaultRolloverStrategymax="30"/>
    </RollingFile>

    <RollingFile name="INFO"
               fileName="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.log"
               filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/xxx.log.%i.gz">
        <PatternLayout>
           <pattern>${patternDetail}</pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicysize="500 MB"/> <!-- Or every 100 MB -->
        </Policies>
        <DefaultRolloverStrategymax="30"/>
</RollingFile>

        2. 在Loggers标签下新增Logger标签

    </Logger>
        <Logger name="com.simon.storm.AlertLogger"level="WARN" additivity="false">
        <appender-refref="ALERT"/>
    </Logger>
        <Logger name="com.simon.storm.PerformanceLogger"level="INFO" additivity="false">
        <appender-refref="PERFORM"/>
    </Logger>
        <Logger name="com.simon.storm.InfoLogger"level="INFO" additivity="false">
        <appender-refref="INFO"/>
    </Logger>
        <Logger name="com.simon.storm.ErrorLogger"level="ERROR" additivity="false">
        <appender-refref="ERROR"/>
    </Logger>

二、       编写日志输出扩展类

1.   日志顶级接口AbstractLogger

public class AbstractLogger {
    private final Logger logger;
    private final String loggerName;

    public AbstractLogger(Class<?> clazz){
        this.logger = Logger.getLogger(clazz);
        this.loggerName = clazz.getName();
    }
    public AbstractLogger(String className){
//  PropertyConfigurator.configure("log4j.properties");
        this.logger = Logger.getLogger(className);
        this.loggerName = className;
    }

    public Logger getLogger() {
        return this.logger;
    }
    /**
     * Getter method for property <tt>loggerName</tt>.
     *
     * @return property value ofloggerName
     */
    public String getLoggerName() {
        return this.loggerName;
    }


    /**
     * debug
     *
     * @param clazz
     * @param msgFormat
     * @param args
     */
    public void debug(Class<?> clazz, StringmsgFormat, Object... args) {
        this.getLogger().debug(String.format("[" +clazz.getSimpleName() + "] " + msgFormat, args));
    }
    /**
     * debug
     *
     * @param clazz
     * @param msg
     */
    public void debug(Class<?> clazz, String msg) {
        this.getLogger().debug("[" +clazz.getSimpleName() + "] " + msg);
    }
    /**
     * info
     *
     * @param clazz
     * @param msgFormat
     * @param args
     */
    public void info(Class<?> clazz, StringmsgFormat, Object... args) {
        this.getLogger().info(String.format("[" +clazz.getSimpleName() + "] " + msgFormat, args));
    }
    /**
     * info
     *
     * @param clazz
     * @param msg
     */
    public void info(Class<?> clazz, String msg) {
        this.getLogger().info("[" +clazz.getSimpleName() + "] " + msg);
    }
    /**
     * error
     *
     * @param clazz
     * @param t
     * @param msgFormat
     * @param args
     */
    public void error(Class<?> clazz, Throwable t,String msgFormat, Object... args) {
        this.getLogger().error(String.format("[" +clazz.getSimpleName() + "] " + msgFormat, args),
                t);
    }
    /**
     * error
     *
     * @param clazz
     * @param msg
     */
    public void error(Class<?> clazz, String msg) {
        this.getLogger().error("[" +clazz.getSimpleName() + "] " + msg);
    }
    /**
     * error
     *
     * @param clazz
     * @param msg
     * @param t
     */
    public void error(Class<?> clazz, String msg,Throwable t) {
        this.getLogger().error("[" +clazz.getSimpleName() + "] " + msg, t);
    }
    /**
     * error
     *
     * @param clazz
     * @param msgFormat
     * @param args
     */
    public void error(Class<?> clazz, StringmsgFormat, Object... args) {
        this.getLogger().error(String.format("[" +clazz.getSimpleName() + "] " + msgFormat, args));
    }
    /**
     * warn
     *
     * @param clazz
     * @param t
     * @param msgFormat
     * @param args
     */
    public void warn(Class<?> clazz, Throwable t,String msgFormat, Object... args) {
        this.getLogger().warn(String.format("[" +clazz.getSimpleName() + "] " + msgFormat, args),
                t);
    }

    /**
     * warn
     *
     * @param clazz
     * @param msg
     */
    public void warn(Class<?> clazz, String msg) {
        this.getLogger().warn("[" +clazz.getSimpleName() + "] " + msg);
    }

    /**
     * warn
     *
     * @param clazz
     * @param msg
     * @param t
     */
    public void warn(Class<?> clazz, String msg,Throwable t) {
        this.getLogger().warn("[" +clazz.getSimpleName() + "] " + msg, t);
    }

    /**
     * warn
     *
     * @param clazz
     * @param msgFormat
     * @param args
     */
    public void warn(Class<?> clazz, StringmsgFormat, Object... args) {
        this.getLogger().warn(String.format("[" +clazz.getSimpleName() + "] " + msgFormat, args));
    }

    /**
     * debug
     *
     * @param msgFormat
     * @param args
     */
    public void debug(String msgFormat, Object... args) {
        this.getLogger().debug(String.format(msgFormat,args));
    }

    /**
     * debug
     *
     * @param msg
     */
    public void debug(String msg) {
        this.getLogger().debug(msg);
    }

    /**
     * info
     *
     * @param msgFormat
     * @param args
     */
    public void info(String msgFormat, Object... args) {
        this.getLogger().info(String.format(msgFormat,args));
    }

    /**
     * info
     *
     * @param msg
     */
    public void info(String msg) {
        this.getLogger().info(msg);
    }

    /**
     * error
     *
     * @param t
     * @param msgFormat
     * @param args
     */
    public void error(Throwable t, String msgFormat,Object... args) {
        this.getLogger().error(String.format(msgFormat,args), t);
    }

    /**
     * error
     *
     * @param msg
     */
    public void error(String msg) {
        this.getLogger().error(msg);
    }

    /**
     * error
     *
     * @param msg
     * @param t
     */
    public void error(String msg, Throwable t) {
        this.getLogger().error(msg, t);
    }

    /**
     * error
     *
     * @param msgFormat
     * @param args
     */
    public void error(String msgFormat, Object... args) {
        this.getLogger().error(String.format(msgFormat,args));
    }

    /**
     * warn
     *
     * @param t
     * @param msgFormat
     * @param args
     */
    public void warn(Throwable t, String msgFormat, Object...args) {
        this.getLogger().warn(String.format(msgFormat,args), t);
    }

    /**
     * warn
     *
     * @param msg
     */
    public void warn(String msg) {
        this.getLogger().warn(msg);
    }

    /**
     * warn
     *
     * @param msg
     * @param t
     */
    public void warn(String msg, Throwable t) {
        this.getLogger().warn(msg, t);
    }

    /**
     * warn
     *
     * @param msgFormat
     * @param args
     */
    public void warn(String msgFormat, Object... args) {
        this.getLogger().warn(String.format(msgFormat,args));
    }

    /**
     * @return boolean
     */
    public boolean isDebugEnabled() {
        return this.getLogger().isDebugEnabled();
    }
}

2.   分离输出类(warn、info、error、performance等)

        以performance性能日志为例:

public class PerformanceLogger extends AbstractLogger {

    private static final PerformanceLogger INSTANCE = new PerformanceLogger();

    public static PerformanceLogger getInstance() {
        return INSTANCE;
    }

    private PerformanceLogger() {
        super(PerformanceLogger.class);
    }

}

3.   具体操作类Log.java

public class Logs {

    private static ErrorLogger errorLogger = ErrorLogger.getInstance();
    private static AlertLogger alertLogger = AlertLogger.getInstance();
    private static PerformanceLogger performanceLogger = PerformanceLogger.getInstance();
    private static InfoLogger infoLogger = InfoLogger.getInstance();

    public static void alert(String... args){
        alertLogger.warn(StringUtils.array2String(args));
    }

    public static void performance(String... args){
        performanceLogger.info(StringUtils.array2String(args));
    }

    public static void error(String... args){
        errorLogger.error(StringUtils.array2String(args));
    }

    public static void info(String... args){
        infoLogger.info(StringUtils.array2String(args));
    }
}

三、       使用

        以输出info为例:

        输出info:

Log.info(“your  information”);

四、       将log模块打包上传到storm安装目录下的extli目录下,重启storm,即可。


猜你喜欢

转载自blog.csdn.net/Simon_09010817/article/details/80256408