test_class.declarator: accessLogFilter = new AccessLogFilter()
test_class.original_string: Filter accessLogFilter = new AccessLogFilter();
test_class.type: Filter
test_class.var_name: accessLogFilter
test_class.file: dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/AccessLogFilterTest.java
test_class.identifier: AccessLogFilterTest
test_case.body: @Test
      public void testCustom() {
          URL url = URL.valueOf("test://test:11/test?accesslog=custom-access.log");
          Invoker<AccessLogFilterTest> invoker = new MyInvoker<AccessLogFilterTest>(url);
          Invocation invocation = new MockInvocation();
          accessLogFilter.invoke(invoker, invocation);
      }
test_case.class_method_signature: AccessLogFilterTest.testCustom()
test_case.full_signature: @Test public void testCustom()
test_case.identifier: testCustom
test_case.invocations: valueOf invoke
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testCustom()
focal_class.declarator: logger = LoggerFactory.getLogger(AccessLogFilter.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = LoggerFactory.getLogger(AccessLogFilter.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: LOG_KEY = "dubbo.accesslog"
focal_class.modifier: private static final
focal_class.original_string: private static final String LOG_KEY = "dubbo.accesslog";
focal_class.type: String
focal_class.var_name: LOG_KEY
focal_class.declarator: LOG_MAX_BUFFER = 5000
focal_class.modifier: private static final
focal_class.original_string: private static final int LOG_MAX_BUFFER = 5000;
focal_class.type: int
focal_class.var_name: LOG_MAX_BUFFER
focal_class.declarator: LOG_OUTPUT_INTERVAL = 5000
focal_class.modifier: private static final
focal_class.original_string: private static final long LOG_OUTPUT_INTERVAL = 5000;
focal_class.type: long
focal_class.var_name: LOG_OUTPUT_INTERVAL
focal_class.declarator: FILE_DATE_FORMAT = "yyyyMMdd"
focal_class.modifier: private static final
focal_class.original_string: private static final String FILE_DATE_FORMAT = "yyyyMMdd";
focal_class.type: String
focal_class.var_name: FILE_DATE_FORMAT
focal_class.declarator: FILE_NAME_FORMATTER = new SimpleDateFormat(FILE_DATE_FORMAT)
focal_class.modifier: private static final
focal_class.original_string: private static final DateFormat FILE_NAME_FORMATTER = new SimpleDateFormat(FILE_DATE_FORMAT);
focal_class.type: DateFormat
focal_class.var_name: FILE_NAME_FORMATTER
focal_class.declarator: LOG_ENTRIES = new ConcurrentHashMap<>()
focal_class.modifier: private static final
focal_class.original_string: private static final Map<String, Set<AccessLogData>> LOG_ENTRIES = new ConcurrentHashMap<>();
focal_class.type: Map<String, Set<AccessLogData>>
focal_class.var_name: LOG_ENTRIES
focal_class.declarator: LOG_SCHEDULED = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Dubbo-Access-Log", true))
focal_class.modifier: private static final
focal_class.original_string: private static final ScheduledExecutorService LOG_SCHEDULED = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Dubbo-Access-Log", true));
focal_class.type: ScheduledExecutorService
focal_class.var_name: LOG_SCHEDULED
focal_class.file: dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
focal_class.identifier: AccessLogFilter
focal_class.interfaces: implements Filter
focal_class.class_method_signature: AccessLogFilter.AccessLogFilter()
focal_class.full_signature: public  AccessLogFilter()
focal_class.identifier: AccessLogFilter
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.signature:  AccessLogFilter()
focal_class.class_method_signature: AccessLogFilter.invoke(Invoker<?> invoker, Invocation inv)
focal_class.full_signature: @Override public Result invoke(Invoker<?> invoker, Invocation inv)
focal_class.identifier: invoke
focal_class.modifiers: @Override public
focal_class.parameters: (Invoker<?> invoker, Invocation inv)
focal_class.return: Result
focal_class.signature: Result invoke(Invoker<?> invoker, Invocation inv)
focal_class.class_method_signature: AccessLogFilter.log(String accessLog, AccessLogData accessLogData)
focal_class.full_signature: private void log(String accessLog, AccessLogData accessLogData)
focal_class.identifier: log
focal_class.modifiers: private
focal_class.parameters: (String accessLog, AccessLogData accessLogData)
focal_class.return: void
focal_class.signature: void log(String accessLog, AccessLogData accessLogData)
focal_class.class_method_signature: AccessLogFilter.writeLogSetToFile(String accessLog, Set<AccessLogData> logSet)
focal_class.full_signature: private void writeLogSetToFile(String accessLog, Set<AccessLogData> logSet)
focal_class.identifier: writeLogSetToFile
focal_class.modifiers: private
focal_class.parameters: (String accessLog, Set<AccessLogData> logSet)
focal_class.return: void
focal_class.signature: void writeLogSetToFile(String accessLog, Set<AccessLogData> logSet)
focal_class.class_method_signature: AccessLogFilter.writeLogToFile()
focal_class.full_signature: private void writeLogToFile()
focal_class.identifier: writeLogToFile
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void writeLogToFile()
focal_class.class_method_signature: AccessLogFilter.processWithAccessKeyLogger(Set<AccessLogData> logSet, File file)
focal_class.full_signature: private void processWithAccessKeyLogger(Set<AccessLogData> logSet, File file)
focal_class.identifier: processWithAccessKeyLogger
focal_class.modifiers: private
focal_class.parameters: (Set<AccessLogData> logSet, File file)
focal_class.return: void
focal_class.signature: void processWithAccessKeyLogger(Set<AccessLogData> logSet, File file)
focal_class.class_method_signature: AccessLogFilter.buildAccessLogData(Invoker<?> invoker, Invocation inv)
focal_class.full_signature: private AccessLogData buildAccessLogData(Invoker<?> invoker, Invocation inv)
focal_class.identifier: buildAccessLogData
focal_class.modifiers: private
focal_class.parameters: (Invoker<?> invoker, Invocation inv)
focal_class.return: AccessLogData
focal_class.signature: AccessLogData buildAccessLogData(Invoker<?> invoker, Invocation inv)
focal_class.class_method_signature: AccessLogFilter.processWithServiceLogger(Set<AccessLogData> logSet)
focal_class.full_signature: private void processWithServiceLogger(Set<AccessLogData> logSet)
focal_class.identifier: processWithServiceLogger
focal_class.modifiers: private
focal_class.parameters: (Set<AccessLogData> logSet)
focal_class.return: void
focal_class.signature: void processWithServiceLogger(Set<AccessLogData> logSet)
focal_class.class_method_signature: AccessLogFilter.createIfLogDirAbsent(File file)
focal_class.full_signature: private void createIfLogDirAbsent(File file)
focal_class.identifier: createIfLogDirAbsent
focal_class.modifiers: private
focal_class.parameters: (File file)
focal_class.return: void
focal_class.signature: void createIfLogDirAbsent(File file)
focal_class.class_method_signature: AccessLogFilter.renameFile(File file)
focal_class.full_signature: private void renameFile(File file)
focal_class.identifier: renameFile
focal_class.modifiers: private
focal_class.parameters: (File file)
focal_class.return: void
focal_class.signature: void renameFile(File file)
focal_method.body: @Override
      public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {
          try {
              String accessLogKey = invoker.getUrl().getParameter(ACCESS_LOG_KEY);
              if (ConfigUtils.isNotEmpty(accessLogKey)) {
                  AccessLogData logData = buildAccessLogData(invoker, inv);
                  log(accessLogKey, logData);
              }
          } catch (Throwable t) {
              logger.warn("Exception in AccessLogFilter of service(" + invoker + " -> " + inv + ")", t);
          }
          return invoker.invoke(inv);
      }
focal_method.class_method_signature: AccessLogFilter.invoke(Invoker<?> invoker, Invocation inv)
focal_method.full_signature: @Override public Result invoke(Invoker<?> invoker, Invocation inv)
focal_method.identifier: invoke
focal_method.invocations: getParameter getUrl isNotEmpty buildAccessLogData log warn invoke
focal_method.modifiers: @Override public
focal_method.parameters: (Invoker<?> invoker, Invocation inv)
focal_method.return: Result
focal_method.signature: Result invoke(Invoker<?> invoker, Invocation inv)