• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }