Coverage for /pythoncovmergedfiles/medio/medio/src/airflow/build/lib/airflow/utils/log/timezone_aware.py: 47%
17 statements
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-25 06:11 +0000
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-25 06:11 +0000
1# Licensed to the Apache Software Foundation (ASF) under one
2# or more contributor license agreements. See the NOTICE file
3# distributed with this work for additional information
4# regarding copyright ownership. The ASF licenses this file
5# to you under the Apache License, Version 2.0 (the
6# "License"); you may not use this file except in compliance
7# with the License. You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing,
12# software distributed under the License is distributed on an
13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14# KIND, either express or implied. See the License for the
15# specific language governing permissions and limitations
16# under the License.
17from __future__ import annotations
19import logging
21import pendulum
24class TimezoneAware(logging.Formatter):
25 """
26 Override `default_time_format`, `default_msec_format` and `formatTime` to specify utc offset.
27 utc offset is the matter, without it, time conversion could be wrong.
28 With this Formatter, `%(asctime)s` will be formatted containing utc offset. (ISO 8601)
29 (e.g. 2022-06-12T13:00:00.123+0000)
30 """
32 default_time_format = "%Y-%m-%dT%H:%M:%S"
33 default_msec_format = "%s.%03d"
34 default_tz_format = "%z"
36 def formatTime(self, record, datefmt=None):
37 """
38 Returns the creation time of the specified LogRecord in ISO 8601 date and time format
39 in the local time zone.
40 """
41 dt = pendulum.from_timestamp(record.created, tz=pendulum.local_timezone())
42 if datefmt:
43 s = dt.strftime(datefmt)
44 else:
45 s = dt.strftime(self.default_time_format)
47 if self.default_msec_format:
48 s = self.default_msec_format % (s, record.msecs)
49 if self.default_tz_format:
50 s += dt.strftime(self.default_tz_format)
51 return s