1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 package com.update.check.log; 17 18 import org.apache.logging.log4j.Level; 19 import org.apache.logging.log4j.LogManager; 20 import org.apache.logging.log4j.core.Appender; 21 import org.apache.logging.log4j.core.LoggerContext; 22 import org.apache.logging.log4j.core.appender.ConsoleAppender; 23 import org.apache.logging.log4j.core.appender.RollingFileAppender; 24 import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy; 25 import org.apache.logging.log4j.core.config.AppenderRef; 26 import org.apache.logging.log4j.core.config.Configuration; 27 import org.apache.logging.log4j.core.config.LoggerConfig; 28 import org.apache.logging.log4j.core.layout.PatternLayout; 29 import java.io.File; 30 import java.util.ArrayList; 31 import java.util.List; 32 33 /** 34 * Logger 35 * 36 * @since 23-04-07 37 */ 38 public abstract class Logger { 39 /** 40 * LOGGER_NAME 41 * 42 * @since 23-04-07 43 */ 44 public static final String LOGGER_NAME = "com.ohos.ui.migration"; 45 46 /** 47 * exception 48 * 49 * @param tag tag 50 * @param message message 51 */ error(String tag, String message)52 public abstract void error(String tag, String message); 53 54 /** 55 * info 56 * 57 * @param tag tag 58 * @param message message 59 */ info(String tag, String message)60 public abstract void info(String tag, String message); 61 62 /** 63 * warn 64 * 65 * @param tag tag 66 * @param message message 67 */ warn(String tag, String message)68 public abstract void warn(String tag, String message); 69 70 /** 71 * d 72 * 73 * @param tag tag 74 * @param message message 75 */ debug(String tag, String message)76 public abstract void debug(String tag, String message); 77 78 /** 79 * init 80 * 81 * @param logDir logDir 82 */ init(String logDir)83 public static void init(String logDir) { 84 System.out.println("configure log directory: " + logDir); 85 org.apache.logging.log4j.spi.LoggerContext context = LogManager.getContext(false); 86 LoggerContext ctx = null; 87 if (context instanceof LoggerContext) { 88 ctx = (LoggerContext) context; 89 } 90 Configuration config = ctx.getConfiguration(); 91 PatternLayout layout = PatternLayout.newBuilder() 92 .withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN) 93 .build(); 94 List<AppenderRef> refs = new ArrayList<>(); 95 Appender rollingFileAppender = createRollingFileAppender(logDir, layout, config, refs); 96 Appender consoleAppender = createConsoleAppender(layout, config, refs); 97 LoggerConfig loggerConfig = LoggerConfig.newBuilder().withAdditivity(false) 98 .withLevel(Level.DEBUG) 99 .withLoggerName(LOGGER_NAME) 100 .withIncludeLocation("true") 101 .withRefs(refs.toArray(new AppenderRef[0])) 102 .withConfig(config) 103 .build(); 104 loggerConfig.addAppender(rollingFileAppender, null, null); 105 loggerConfig.addAppender(consoleAppender, null, null); 106 config.addLogger(LOGGER_NAME, loggerConfig); 107 ctx.updateLoggers(); 108 } 109 createRollingFileAppender(String logDir, PatternLayout layout, Configuration config, List<AppenderRef> refs)110 private static Appender createRollingFileAppender(String logDir, PatternLayout layout, Configuration config, 111 List<AppenderRef> refs) { 112 File logFile = new File(logDir, "updateCheck.log"); 113 // 5MB = 5 * 1024 * 1024 = 5242880 114 SizeBasedTriggeringPolicy policy = SizeBasedTriggeringPolicy.createPolicy("5242880"); 115 String appenderName = "updateCheck-file"; 116 Appender appender = RollingFileAppender.newBuilder().withFileName(logFile.getPath()) 117 .withFilePattern("%d{yyyyMMdd-HHmm}.log.zip") 118 .withAppend(true) 119 .withPolicy(policy) 120 .setName(appenderName) 121 .setLayout(layout) 122 .setConfiguration(config) 123 .build(); 124 appender.start(); 125 config.addAppender(appender); 126 refs.add(AppenderRef.createAppenderRef(appenderName, null, null)); 127 return appender; 128 } 129 createConsoleAppender(PatternLayout layout, Configuration config, List<AppenderRef> refs)130 private static Appender createConsoleAppender(PatternLayout layout, Configuration config, List<AppenderRef> refs) { 131 String appenderName = "check-console"; 132 Appender appender = ConsoleAppender.newBuilder() 133 .setName(appenderName) 134 .setLayout(layout) 135 .setConfiguration(config) 136 .build(); 137 appender.start(); 138 config.addAppender(appender); 139 refs.add(AppenderRef.createAppenderRef(appenderName, null, null)); 140 return appender; 141 } 142 143 144 /** 145 * createLogger 146 * 147 * @return logger 148 */ createLogger()149 public static Logger createLogger() { 150 return new LoggerImpl(); 151 } 152 }