code: public static void init(String filename) {
          ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
          ClassLoader newClassLoader = LogCodes.class.getClassLoader();
          try {
              Thread.currentThread().setContextClassLoader(newClassLoader);
              // 由于 ConfigUtil 类是在 sofa-rpc-api 工程里的，core 依赖了 log
              // 所以不能直接使用 ConfigUtil，以免导致循环依赖
              // 故直接获取环境变量
              String encoding = Locale.getDefault().toString();
              if (encoding == null || encoding.length() == 0) {
                  encoding = Locale.ENGLISH.toString();
              }
              String name = "sofa-rpc/" + filename + "_" + encoding + ".properties";
              // 如果没有找到文件，默认读取 $filename_en.properties
              if (LogCodes.class.getClassLoader().getResource(name) == null) {
                  name = "sofa-rpc/" + filename + "_" + Locale.ENGLISH.toString() + ".properties";
              }
              InputStreamReader reader = null;
              InputStream in = null;
              try {
                  Properties properties = new Properties();
                  in = LogCodes.class.getClassLoader().getResourceAsStream(name);
                  reader = new InputStreamReader(in, "UTF-8");
                  properties.load(reader);
                  for (Map.Entry entry : properties.entrySet()) {
                      LOG_CODES.put((String) entry.getKey(), (String) entry.getValue());
                  }
                  NOTE = LOG_CODES.get(NOTE_CODE) == null ? "" : LOG_CODES.get(NOTE_CODE);
              } catch (Exception e) {
                  LOGGER.error("初始化日志码失败：" + name, e);
              } finally {
                  IOUtils.closeQuietly(in);
                  IOUtils.closeQuietly(reader);
              }
          } finally {
              Thread.currentThread().setContextClassLoader(oldClassLoader);
          }
  
      }
docs: 初始化 Log Codes
  @param filename 用户名