Compare commits
No commits in common. "master" and "0.7.x" have entirely different histories.
@ -2,6 +2,7 @@
|
|||||||
Checks: 'clang-diagnostic-*,clang-analyzer-*,google-*,modernize-*,-modernize-use-trailing-return-type,readability-*,portability-*,performance-*,bugprone-*,android-*,darwin-*,clang-analyzer-*'
|
Checks: 'clang-diagnostic-*,clang-analyzer-*,google-*,modernize-*,-modernize-use-trailing-return-type,readability-*,portability-*,performance-*,bugprone-*,android-*,darwin-*,clang-analyzer-*'
|
||||||
WarningsAsErrors: ''
|
WarningsAsErrors: ''
|
||||||
HeaderFilterRegex: ''
|
HeaderFilterRegex: ''
|
||||||
|
AnalyzeTemporaryDtors: false
|
||||||
FormatStyle: file
|
FormatStyle: file
|
||||||
CheckOptions:
|
CheckOptions:
|
||||||
- key: cert-dcl16-c.NewSuffixes
|
- key: cert-dcl16-c.NewSuffixes
|
||||||
|
|||||||
32
.github/workflows/linux.yml
vendored
32
.github/workflows/linux.yml
vendored
@ -31,20 +31,42 @@ jobs:
|
|||||||
- name: Setup Dependencies
|
- name: Setup Dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-suggests --no-install-recommends \
|
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y \
|
||||||
g++ \
|
build-essential \
|
||||||
cmake \
|
cmake \
|
||||||
gcovr \
|
gcovr \
|
||||||
libgflags-dev \
|
libgflags-dev \
|
||||||
libgmock-dev \
|
|
||||||
libgtest-dev \
|
|
||||||
libunwind-dev \
|
libunwind-dev \
|
||||||
ninja-build
|
ninja-build
|
||||||
|
|
||||||
|
- name: Cache GTest
|
||||||
|
id: cache-gtest
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: gtest/
|
||||||
|
key: ${{runner.os}}-gtest-1.11
|
||||||
|
|
||||||
|
- name: Download GTest
|
||||||
|
if: steps.cache-gtest.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
wget https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz
|
||||||
|
tar xvf release-1.11.0.tar.gz
|
||||||
|
|
||||||
|
- name: Build GTest
|
||||||
|
if: steps.cache-gtest.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
cmake -S googletest-release-1.11.0 -B build-googletest \
|
||||||
|
-DBUILD_SHARED_LIBS=${{matrix.shared}} \
|
||||||
|
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/gtest \
|
||||||
|
-G Ninja
|
||||||
|
cmake --build build-googletest --target install
|
||||||
|
|
||||||
- name: Setup Environment
|
- name: Setup Environment
|
||||||
if: matrix.build_type == 'Debug'
|
if: matrix.build_type == 'Debug'
|
||||||
run: |
|
run: |
|
||||||
echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV
|
echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV
|
||||||
|
echo 'GTest_ROOT=${{github.workspace}}/gtest' >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
env:
|
env:
|
||||||
@ -109,7 +131,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Coverage to Codecov
|
- name: Upload Coverage to Codecov
|
||||||
if: matrix.build_type == 'Debug'
|
if: matrix.build_type == 'Debug'
|
||||||
uses: codecov/codecov-action@v5
|
uses: codecov/codecov-action@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: build_${{matrix.build_type}}/coverage.xml
|
files: build_${{matrix.build_type}}/coverage.xml
|
||||||
|
|||||||
2
.github/workflows/macos.yml
vendored
2
.github/workflows/macos.yml
vendored
@ -68,7 +68,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Coverage to Codecov
|
- name: Upload Coverage to Codecov
|
||||||
if: matrix.build_type == 'Debug'
|
if: matrix.build_type == 'Debug'
|
||||||
uses: codecov/codecov-action@v5
|
uses: codecov/codecov-action@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: build_${{matrix.build_type}}/coverage.xml
|
files: build_${{matrix.build_type}}/coverage.xml
|
||||||
|
|||||||
10
.github/workflows/windows.yml
vendored
10
.github/workflows/windows.yml
vendored
@ -45,18 +45,18 @@ jobs:
|
|||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: gtest/
|
path: gtest/
|
||||||
key: ${{runner.os}}-gtest-1.14-${{matrix.lib}}-${{matrix.arch}}-${{matrix.build_type}}
|
key: ${{runner.os}}-gtest-1.11-${{matrix.lib}}-${{matrix.arch}}-${{matrix.build_type}}
|
||||||
|
|
||||||
- name: Download GTest
|
- name: Download GTest
|
||||||
if: steps.cache-gtest.outputs.cache-hit != 'true'
|
if: steps.cache-gtest.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
(New-Object System.Net.WebClient).DownloadFile("https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip", "v1.14.0.zip")
|
(New-Object System.Net.WebClient).DownloadFile("https://github.com/google/googletest/archive/refs/tags/release-1.11.0.zip", "release-1.11.0.zip")
|
||||||
Expand-Archive v1.14.0.zip .
|
Expand-Archive release-1.11.0.zip .
|
||||||
|
|
||||||
- name: Build GTest
|
- name: Build GTest
|
||||||
if: steps.cache-gtest.outputs.cache-hit != 'true'
|
if: steps.cache-gtest.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
cmake -S googletest-1.14.0 -B build-googletest `
|
cmake -S googletest-release-1.11.0 -B build-googletest `
|
||||||
-A ${{matrix.arch}} `
|
-A ${{matrix.arch}} `
|
||||||
-DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} `
|
-DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} `
|
||||||
-Dgtest_force_shared_crt=ON `
|
-Dgtest_force_shared_crt=ON `
|
||||||
@ -234,7 +234,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Coverage to Codecov
|
- name: Upload Coverage to Codecov
|
||||||
if: matrix.build_type == 'Debug'
|
if: matrix.build_type == 'Debug'
|
||||||
uses: codecov/codecov-action@v5
|
uses: codecov/codecov-action@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: build_${{matrix.build_type}}/coverage.xml
|
files: build_${{matrix.build_type}}/coverage.xml
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,5 +2,3 @@
|
|||||||
/build*/
|
/build*/
|
||||||
/site/
|
/site/
|
||||||
bazel-*
|
bazel-*
|
||||||
# Bzlmod lockfile
|
|
||||||
/MODULE.bazel.lock
|
|
||||||
|
|||||||
@ -17,6 +17,6 @@ platform(
|
|||||||
constraint_values = [
|
constraint_values = [
|
||||||
"@platforms//cpu:x86_64",
|
"@platforms//cpu:x86_64",
|
||||||
"@platforms//os:windows",
|
"@platforms//os:windows",
|
||||||
"@rules_cc//cc/private/toolchain:clang-cl",
|
"@bazel_tools//tools/cpp:clang-cl",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required (VERSION 3.22)
|
cmake_minimum_required (VERSION 3.22)
|
||||||
project (glog
|
project (glog
|
||||||
VERSION 0.8.0
|
VERSION 0.7.2
|
||||||
DESCRIPTION "C++ implementation of the Google logging module"
|
DESCRIPTION "C++ implementation of the Google logging module"
|
||||||
HOMEPAGE_URL https://github.com/google/glog
|
HOMEPAGE_URL https://github.com/google/glog
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
@ -64,7 +64,7 @@ set (CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
|||||||
|
|
||||||
set (CMAKE_DEBUG_POSTFIX d)
|
set (CMAKE_DEBUG_POSTFIX d)
|
||||||
|
|
||||||
find_package (GTest 1.11 COMPONENTS GTest OPTIONAL_COMPONENTS GMock NO_MODULE)
|
find_package (GTest NO_MODULE)
|
||||||
|
|
||||||
if (GTest_FOUND)
|
if (GTest_FOUND)
|
||||||
set (HAVE_LIB_GTEST 1)
|
set (HAVE_LIB_GTEST 1)
|
||||||
@ -278,12 +278,12 @@ if (WITH_SYMBOLIZE)
|
|||||||
if (HAVE_SYMBOLIZE)
|
if (HAVE_SYMBOLIZE)
|
||||||
set (HAVE_STACKTRACE 1)
|
set (HAVE_STACKTRACE 1)
|
||||||
endif (HAVE_SYMBOLIZE)
|
endif (HAVE_SYMBOLIZE)
|
||||||
elseif (APPLE AND HAVE_DLADDR)
|
|
||||||
set (HAVE_SYMBOLIZE 1)
|
|
||||||
elseif (UNIX)
|
elseif (UNIX)
|
||||||
if (HAVE_ELF_H OR HAVE_SYS_EXEC_ELF_H)
|
if (HAVE_ELF_H OR HAVE_SYS_EXEC_ELF_H)
|
||||||
set (HAVE_SYMBOLIZE 1)
|
set (HAVE_SYMBOLIZE 1)
|
||||||
endif (HAVE_ELF_H OR HAVE_SYS_EXEC_ELF_H)
|
endif (HAVE_ELF_H OR HAVE_SYS_EXEC_ELF_H)
|
||||||
|
elseif (APPLE AND HAVE_DLADDR)
|
||||||
|
set (HAVE_SYMBOLIZE 1)
|
||||||
endif (WIN32 OR CYGWIN)
|
endif (WIN32 OR CYGWIN)
|
||||||
endif (WITH_SYMBOLIZE)
|
endif (WITH_SYMBOLIZE)
|
||||||
|
|
||||||
@ -467,7 +467,7 @@ if (ANDROID)
|
|||||||
endif (ANDROID)
|
endif (ANDROID)
|
||||||
|
|
||||||
set_target_properties (glog PROPERTIES VERSION ${glog_VERSION})
|
set_target_properties (glog PROPERTIES VERSION ${glog_VERSION})
|
||||||
set_target_properties (glog PROPERTIES SOVERSION 3)
|
set_target_properties (glog PROPERTIES SOVERSION 2)
|
||||||
|
|
||||||
if (CYGWIN OR WIN32)
|
if (CYGWIN OR WIN32)
|
||||||
target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
|
target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
|
||||||
|
|||||||
@ -3,11 +3,4 @@ module(
|
|||||||
compatibility_level = 1,
|
compatibility_level = 1,
|
||||||
)
|
)
|
||||||
|
|
||||||
bazel_dep(name = "gflags", version = "2.2.2")
|
bazel_dep(name = "gflags", version = "2.2.2", repo_name = "com_github_gflags_gflags")
|
||||||
bazel_dep(name = "googletest", version = "1.14.0", dev_dependency = True)
|
|
||||||
bazel_dep(name = "platforms", version = "0.0.10")
|
|
||||||
bazel_dep(name = "rules_cc", version = "0.0.12")
|
|
||||||
|
|
||||||
# Required for Windows clang-cl build: --extra_toolchains=@local_config_cc//:cc-toolchain-arm64_windows
|
|
||||||
cc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension")
|
|
||||||
use_repo(cc_configure, "local_config_cc")
|
|
||||||
|
|||||||
18
WORKSPACE
Normal file
18
WORKSPACE
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "com_github_gflags_gflags",
|
||||||
|
sha256 = "34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf",
|
||||||
|
strip_prefix = "gflags-2.2.2",
|
||||||
|
urls = [
|
||||||
|
"https://mirror.bazel.build/github.com/gflags/gflags/archive/v2.2.2.tar.gz",
|
||||||
|
"https://github.com/gflags/gflags/archive/v2.2.2.tar.gz",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "com_github_google_googletest",
|
||||||
|
sha256 = "258f33ab1a8ee17adf48ec65e821d0ea9eafcbedeff6110f9eaed78472e73dde",
|
||||||
|
strip_prefix = "googletest-15460959cbbfa20e66ef0b5ab497367e47fc0a04",
|
||||||
|
urls = ["https://github.com/google/googletest/archive/15460959cbbfa20e66ef0b5ab497367e47fc0a04.tar.gz"],
|
||||||
|
)
|
||||||
@ -1 +0,0 @@
|
|||||||
# WORKSPACE marker file needed by Bazel
|
|
||||||
@ -4,6 +4,6 @@ cc_test(
|
|||||||
srcs = ["main.cc"],
|
srcs = ["main.cc"],
|
||||||
deps = [
|
deps = [
|
||||||
"//:glog",
|
"//:glog",
|
||||||
"@gflags//:gflags",
|
"@com_github_gflags_gflags//:gflags",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@ -128,7 +128,7 @@ def glog_library(with_gflags = 1, **kwargs):
|
|||||||
"src/windows/port.h",
|
"src/windows/port.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
gflags_deps = ["@gflags//:gflags"] if with_gflags else []
|
gflags_deps = ["@com_github_gflags_gflags//:gflags"] if with_gflags else []
|
||||||
|
|
||||||
final_lib_defines = select({
|
final_lib_defines = select({
|
||||||
# GLOG_EXPORT is normally set by export.h, but that's not
|
# GLOG_EXPORT is normally set by export.h, but that's not
|
||||||
@ -261,7 +261,7 @@ def glog_library(with_gflags = 1, **kwargs):
|
|||||||
copts = final_lib_copts + test_only_copts,
|
copts = final_lib_copts + test_only_copts,
|
||||||
deps = gflags_deps + [
|
deps = gflags_deps + [
|
||||||
":glog",
|
":glog",
|
||||||
"@googletest//:gtest",
|
"@com_github_google_googletest//:gtest",
|
||||||
],
|
],
|
||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|||||||
@ -3,20 +3,27 @@
|
|||||||
## Bazel
|
## Bazel
|
||||||
|
|
||||||
To use glog within a project which uses the [Bazel](https://bazel.build/) build
|
To use glog within a project which uses the [Bazel](https://bazel.build/) build
|
||||||
tool, add the following lines to your `MODULE.bazel` file:
|
tool, add the following lines to your `WORKSPACE` file:
|
||||||
|
|
||||||
``` bazel title="MODULE.bazel"
|
``` bazel title="WORKSPACE"
|
||||||
bazel_dep(name = "glog")
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
archive_override(
|
http_archive(
|
||||||
module_name = "glog",
|
name = "com_github_gflags_gflags",
|
||||||
urls = "https://github.com/google/glog/archive/cc0de6c200375b33d907ee7632eee2f173b33a09.tar.gz",
|
sha256 = "34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf",
|
||||||
strip_prefix = "glog-cc0de6c200375b33d907ee7632eee2f173b33a09", # Latest commit as of 2024-06-08.
|
strip_prefix = "gflags-2.2.2",
|
||||||
integrity = "sha256-rUrv4EBkdc+4Wbhfxp+KoRstlj2Iw842/OpLfDq0ivg=",
|
urls = ["https://github.com/gflags/gflags/archive/v2.2.2.tar.gz"],
|
||||||
|
)
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "com_github_google_glog",
|
||||||
|
sha256 = "c17d85c03ad9630006ef32c7be7c65656aba2e7e2fbfc82226b7e680c771fc88",
|
||||||
|
strip_prefix = "glog-0.7.1",
|
||||||
|
urls = ["https://github.com/google/glog/archive/v0.7.1.zip"],
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
You can then add `@glog//:glog` to
|
You can then add `@com_github_google_glog//:glog` to
|
||||||
the deps section of a `cc_binary` or
|
the deps section of a `cc_binary` or
|
||||||
`cc_library` rule, and `#!cpp #include <glog/logging.h>` to
|
`cc_library` rule, and `#!cpp #include <glog/logging.h>` to
|
||||||
include it in your source code.
|
include it in your source code.
|
||||||
@ -26,7 +33,7 @@ include it in your source code.
|
|||||||
cc_binary(
|
cc_binary(
|
||||||
name = "main",
|
name = "main",
|
||||||
srcs = ["main.cc"],
|
srcs = ["main.cc"],
|
||||||
deps = ["@glog//:glog"],
|
deps = ["@com_github_google_glog//:glog"],
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -24,8 +24,8 @@ don't need to do it again.
|
|||||||
|
|
||||||
Once your CLA is submitted (or if you already submitted one for another Google
|
Once your CLA is submitted (or if you already submitted one for another Google
|
||||||
project), make a commit adding yourself to the
|
project), make a commit adding yourself to the
|
||||||
[AUTHORS](https://github.com/google/glog/blob/master/AUTHORS) and
|
[AUTHORS](https://github.com/google/glog/blob/0.7.x/AUTHORS) and
|
||||||
[CONTRIBUTORS](https://github.com/google/glog/blob/master/CONTRIBUTORS) files.
|
[CONTRIBUTORS](https://github.com/google/glog/blob/0.7.x/CONTRIBUTORS) files.
|
||||||
This commit can be part of your first [pull
|
This commit can be part of your first [pull
|
||||||
request](https://help.github.com/articles/creating-a-pull-request).
|
request](https://help.github.com/articles/creating-a-pull-request).
|
||||||
|
|
||||||
|
|||||||
@ -69,7 +69,7 @@ The following flags are most commonly used:
|
|||||||
logging](logging.md#verbose-logging) for more details.
|
logging](logging.md#verbose-logging) for more details.
|
||||||
|
|
||||||
Additional flags are defined in
|
Additional flags are defined in
|
||||||
[flags.cc](https://github.com/google/glog/blob/master/src/flags.cc). Please see
|
[flags.cc](https://github.com/google/glog/blob/0.7.x/src/flags.cc). Please see
|
||||||
the source for their complete list.
|
the source for their complete list.
|
||||||
|
|
||||||
## Modifying Flags Programmatically
|
## Modifying Flags Programmatically
|
||||||
|
|||||||
@ -397,7 +397,7 @@ The header file `<glog/raw_logging.h>` can be used for thread-safe logging,
|
|||||||
which does not allocate any memory or acquire any locks. Therefore, the macros
|
which does not allocate any memory or acquire any locks. Therefore, the macros
|
||||||
defined in this header file can be used by low-level memory allocation and
|
defined in this header file can be used by low-level memory allocation and
|
||||||
synchronization code. Please check
|
synchronization code. Please check
|
||||||
[src/glog/raw_logging.h](https://github.com/google/glog/blob/master/src/glog/raw_logging.h)
|
[src/glog/raw_logging.h](https://github.com/google/glog/blob/0.7.x/src/glog/raw_logging.h)
|
||||||
for detail.
|
for detail.
|
||||||
|
|
||||||
## Google Style `perror()`
|
## Google Style `perror()`
|
||||||
|
|||||||
@ -8,7 +8,7 @@ find_package` to build against glog in your CMake project as follows:
|
|||||||
cmake_minimum_required (VERSION 3.16)
|
cmake_minimum_required (VERSION 3.16)
|
||||||
project (myproj VERSION 1.0)
|
project (myproj VERSION 1.0)
|
||||||
|
|
||||||
find_package (glog 0.8.0 REQUIRED)
|
find_package (glog 0.7.2 REQUIRED)
|
||||||
|
|
||||||
add_executable (myapp main.cpp)
|
add_executable (myapp main.cpp)
|
||||||
target_link_libraries (myapp glog::glog)
|
target_link_libraries (myapp glog::glog)
|
||||||
|
|||||||
@ -3,7 +3,7 @@ site_name: Google Logging Library
|
|||||||
site_url: https://google.github.io/glog/
|
site_url: https://google.github.io/glog/
|
||||||
repo_url: https://github.com/google/glog
|
repo_url: https://github.com/google/glog
|
||||||
repo_name: google/glog
|
repo_name: google/glog
|
||||||
edit_uri: edit/master/docs/
|
edit_uri: edit/0.7.x/docs/
|
||||||
copyright: Copyright © 2024 Google Inc. & contributors - <a href="#__consent">Change cookie settings</a>
|
copyright: Copyright © 2024 Google Inc. & contributors - <a href="#__consent">Change cookie settings</a>
|
||||||
markdown_extensions:
|
markdown_extensions:
|
||||||
- admonition
|
- admonition
|
||||||
@ -81,7 +81,7 @@ plugins:
|
|||||||
enable_creation_date: true
|
enable_creation_date: true
|
||||||
- git-committers:
|
- git-committers:
|
||||||
repository: google/glog
|
repository: google/glog
|
||||||
branch: master
|
branch: 0.7.x
|
||||||
- privacy
|
- privacy
|
||||||
- search
|
- search
|
||||||
- tags
|
- tags
|
||||||
|
|||||||
@ -83,6 +83,10 @@ struct GLOG_EXPORT LogMessageTime {
|
|||||||
LogMessageTime();
|
LogMessageTime();
|
||||||
explicit LogMessageTime(std::chrono::system_clock::time_point now);
|
explicit LogMessageTime(std::chrono::system_clock::time_point now);
|
||||||
|
|
||||||
|
[[deprecated("Use LogMessageTime::when() instead.")]] std::time_t timestamp()
|
||||||
|
const noexcept {
|
||||||
|
return std::chrono::system_clock::to_time_t(when());
|
||||||
|
}
|
||||||
const std::chrono::system_clock::time_point& when() const noexcept {
|
const std::chrono::system_clock::time_point& when() const noexcept {
|
||||||
return timestamp_;
|
return timestamp_;
|
||||||
}
|
}
|
||||||
@ -96,6 +100,10 @@ struct GLOG_EXPORT LogMessageTime {
|
|||||||
int dayOfWeek() const noexcept { return tm_.tm_wday; }
|
int dayOfWeek() const noexcept { return tm_.tm_wday; }
|
||||||
int dayInYear() const noexcept { return tm_.tm_yday; }
|
int dayInYear() const noexcept { return tm_.tm_yday; }
|
||||||
int dst() const noexcept { return tm_.tm_isdst; }
|
int dst() const noexcept { return tm_.tm_isdst; }
|
||||||
|
[[deprecated("Use LogMessageTime::gmtoffset() instead.")]] long gmtoff()
|
||||||
|
const noexcept {
|
||||||
|
return gmtoffset_.count();
|
||||||
|
}
|
||||||
std::chrono::seconds gmtoffset() const noexcept { return gmtoffset_; }
|
std::chrono::seconds gmtoffset() const noexcept { return gmtoffset_; }
|
||||||
const std::tm& tm() const noexcept { return tm_; }
|
const std::tm& tm() const noexcept { return tm_; }
|
||||||
|
|
||||||
@ -107,6 +115,24 @@ struct GLOG_EXPORT LogMessageTime {
|
|||||||
std::chrono::seconds gmtoffset_;
|
std::chrono::seconds gmtoffset_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct [[deprecated("Use LogMessage instead.")]] LogMessageInfo {
|
||||||
|
explicit LogMessageInfo(const char* const severity_,
|
||||||
|
const char* const filename_, const int& line_number_,
|
||||||
|
std::thread::id thread_id_,
|
||||||
|
const LogMessageTime& time_)
|
||||||
|
: severity(severity_),
|
||||||
|
filename(filename_),
|
||||||
|
line_number(line_number_),
|
||||||
|
thread_id(thread_id_),
|
||||||
|
time(time_) {}
|
||||||
|
|
||||||
|
const char* const severity;
|
||||||
|
const char* const filename;
|
||||||
|
const int& line_number;
|
||||||
|
std::thread::id thread_id;
|
||||||
|
const LogMessageTime& time;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace google
|
} // namespace google
|
||||||
|
|
||||||
// The global value of GOOGLE_STRIP_LOG. All the messages logged to
|
// The global value of GOOGLE_STRIP_LOG. All the messages logged to
|
||||||
@ -456,6 +482,27 @@ namespace google {
|
|||||||
// specified by argv0 in log outputs.
|
// specified by argv0 in log outputs.
|
||||||
GLOG_EXPORT void InitGoogleLogging(const char* argv0);
|
GLOG_EXPORT void InitGoogleLogging(const char* argv0);
|
||||||
|
|
||||||
|
class LogMessage;
|
||||||
|
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4996)
|
||||||
|
#endif // __GNUG__
|
||||||
|
using CustomPrefixCallback
|
||||||
|
[[deprecated("Use PrefixFormatterCallback instead.")]] =
|
||||||
|
void (*)(std::ostream&, const LogMessageInfo&, void*);
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif // __GNUG__
|
||||||
|
[[deprecated("Use InstallPrefixFormatter instead.")]] GLOG_EXPORT void
|
||||||
|
InitGoogleLogging(const char* argv0, CustomPrefixCallback prefix_callback,
|
||||||
|
void* prefix_callback_data = nullptr);
|
||||||
|
|
||||||
// Check if google's logging library has been initialized.
|
// Check if google's logging library has been initialized.
|
||||||
GLOG_EXPORT bool IsGoogleLoggingInitialized();
|
GLOG_EXPORT bool IsGoogleLoggingInitialized();
|
||||||
|
|
||||||
@ -468,8 +515,6 @@ typedef void (*logging_fail_func_t)() __attribute__((noreturn));
|
|||||||
typedef void (*logging_fail_func_t)();
|
typedef void (*logging_fail_func_t)();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class LogMessage;
|
|
||||||
|
|
||||||
using PrefixFormatterCallback = void (*)(std::ostream&, const LogMessage&,
|
using PrefixFormatterCallback = void (*)(std::ostream&, const LogMessage&,
|
||||||
void*);
|
void*);
|
||||||
|
|
||||||
@ -481,6 +526,10 @@ GLOG_EXPORT void InstallPrefixFormatter(PrefixFormatterCallback callback,
|
|||||||
GLOG_EXPORT logging_fail_func_t
|
GLOG_EXPORT logging_fail_func_t
|
||||||
InstallFailureFunction(logging_fail_func_t fail_func);
|
InstallFailureFunction(logging_fail_func_t fail_func);
|
||||||
|
|
||||||
|
[[deprecated(
|
||||||
|
"Use the type-safe std::chrono::minutes EnableLogCleaner overload "
|
||||||
|
"instead.")]] GLOG_EXPORT void
|
||||||
|
EnableLogCleaner(unsigned int overdue_days);
|
||||||
// Enable/Disable old log cleaner.
|
// Enable/Disable old log cleaner.
|
||||||
GLOG_EXPORT void EnableLogCleaner(const std::chrono::minutes& overdue);
|
GLOG_EXPORT void EnableLogCleaner(const std::chrono::minutes& overdue);
|
||||||
GLOG_EXPORT void DisableLogCleaner();
|
GLOG_EXPORT void DisableLogCleaner();
|
||||||
@ -1312,6 +1361,11 @@ class GLOG_EXPORT LogMessage {
|
|||||||
// Must be called without the log_mutex held. (L < log_mutex)
|
// Must be called without the log_mutex held. (L < log_mutex)
|
||||||
static int64 num_messages(int severity);
|
static int64 num_messages(int severity);
|
||||||
|
|
||||||
|
[[deprecated("Use LogMessage::time() instead.")]] const LogMessageTime&
|
||||||
|
getLogMessageTime() const {
|
||||||
|
return time();
|
||||||
|
}
|
||||||
|
|
||||||
LogSeverity severity() const noexcept;
|
LogSeverity severity() const noexcept;
|
||||||
int line() const noexcept;
|
int line() const noexcept;
|
||||||
const std::thread::id& thread_id() const noexcept;
|
const std::thread::id& thread_id() const noexcept;
|
||||||
@ -1419,7 +1473,7 @@ T CheckNotNull(const char* file, int line, const char* names, T&& t) {
|
|||||||
struct LogMessageVoidify {
|
struct LogMessageVoidify {
|
||||||
// This has to be an operator with a precedence lower than << but
|
// This has to be an operator with a precedence lower than << but
|
||||||
// higher than ?:
|
// higher than ?:
|
||||||
constexpr void operator&(std::ostream&) const noexcept {}
|
void operator&(std::ostream&) noexcept {}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
@ -1466,7 +1520,12 @@ class GLOG_EXPORT LogSink {
|
|||||||
virtual void send(LogSeverity severity, const char* full_filename,
|
virtual void send(LogSeverity severity, const char* full_filename,
|
||||||
const char* base_filename, int line,
|
const char* base_filename, int line,
|
||||||
const LogMessageTime& time, const char* message,
|
const LogMessageTime& time, const char* message,
|
||||||
size_t message_len) = 0;
|
size_t message_len);
|
||||||
|
// Provide an overload for compatibility purposes
|
||||||
|
GLOG_DEPRECATED
|
||||||
|
virtual void send(LogSeverity severity, const char* full_filename,
|
||||||
|
const char* base_filename, int line, const std::tm* t,
|
||||||
|
const char* message, size_t message_len);
|
||||||
|
|
||||||
// Redefine this to implement waiting for
|
// Redefine this to implement waiting for
|
||||||
// the sink's logging logic to complete.
|
// the sink's logging logic to complete.
|
||||||
@ -1578,9 +1637,15 @@ class GLOG_EXPORT Logger {
|
|||||||
// appropriate by the higher level logging facility. For example,
|
// appropriate by the higher level logging facility. For example,
|
||||||
// textual log messages already contain timestamps, and the
|
// textual log messages already contain timestamps, and the
|
||||||
// file:linenumber header.
|
// file:linenumber header.
|
||||||
|
[[deprecated(
|
||||||
|
"Logger::Write accepting a std::time_t timestamp is provided for "
|
||||||
|
"compatibility purposes only. New code should implement the "
|
||||||
|
"std::chrono::system_clock::time_point overload.")]] virtual void
|
||||||
|
Write(bool force_flush, time_t timestamp, const char* message,
|
||||||
|
size_t message_len);
|
||||||
virtual void Write(bool force_flush,
|
virtual void Write(bool force_flush,
|
||||||
const std::chrono::system_clock::time_point& timestamp,
|
const std::chrono::system_clock::time_point& timestamp,
|
||||||
const char* message, size_t message_len) = 0;
|
const char* message, size_t message_len);
|
||||||
|
|
||||||
// Flush any buffered messages
|
// Flush any buffered messages
|
||||||
virtual void Flush() = 0;
|
virtual void Flush() = 0;
|
||||||
|
|||||||
140
src/logging.cc
140
src/logging.cc
@ -342,6 +342,28 @@ static bool SendEmailInternal(const char* dest, const char* subject,
|
|||||||
|
|
||||||
base::Logger::~Logger() = default;
|
base::Logger::~Logger() = default;
|
||||||
|
|
||||||
|
void base::Logger::Write(bool /*force_flush*/, time_t /*timestamp*/,
|
||||||
|
const char* /*message*/, size_t /*message_len*/) {}
|
||||||
|
|
||||||
|
void base::Logger::Write(bool force_flush,
|
||||||
|
const std::chrono::system_clock::time_point& timestamp,
|
||||||
|
const char* message, size_t message_len) {
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4996)
|
||||||
|
#endif // __GNUG__
|
||||||
|
return Write(force_flush, std::chrono::system_clock::to_time_t(timestamp),
|
||||||
|
message, message_len);
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif // __GNUG__
|
||||||
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
constexpr std::intmax_t kSecondsInDay = 60 * 60 * 24;
|
constexpr std::intmax_t kSecondsInDay = 60 * 60 * 24;
|
||||||
@ -350,11 +372,44 @@ constexpr std::intmax_t kSecondsInWeek = kSecondsInDay * 7;
|
|||||||
// Optional user-configured callback to print custom prefixes.
|
// Optional user-configured callback to print custom prefixes.
|
||||||
class PrefixFormatter {
|
class PrefixFormatter {
|
||||||
public:
|
public:
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4996)
|
||||||
|
#endif // __GNUG__
|
||||||
|
PrefixFormatter(CustomPrefixCallback callback, void* data) noexcept
|
||||||
|
: version{V1}, callback_v1{callback}, data{data} {}
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif // __GNUG__
|
||||||
PrefixFormatter(PrefixFormatterCallback callback, void* data) noexcept
|
PrefixFormatter(PrefixFormatterCallback callback, void* data) noexcept
|
||||||
: version{V2}, callback_v2{callback}, data{data} {}
|
: version{V2}, callback_v2{callback}, data{data} {}
|
||||||
|
|
||||||
void operator()(std::ostream& s, const LogMessage& message) const {
|
void operator()(std::ostream& s, const LogMessage& message) const {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
|
case V1:
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4996)
|
||||||
|
#endif // __GNUG__
|
||||||
|
callback_v1(s,
|
||||||
|
LogMessageInfo(LogSeverityNames[message.severity()],
|
||||||
|
message.basename(), message.line(),
|
||||||
|
message.thread_id(), message.time()),
|
||||||
|
data);
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif // __GNUG__
|
||||||
|
break;
|
||||||
case V2:
|
case V2:
|
||||||
callback_v2(s, message, data);
|
callback_v2(s, message, data);
|
||||||
break;
|
break;
|
||||||
@ -365,8 +420,21 @@ class PrefixFormatter {
|
|||||||
PrefixFormatter& operator=(const PrefixFormatter& other) = delete;
|
PrefixFormatter& operator=(const PrefixFormatter& other) = delete;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum Version { V2 } version;
|
enum Version { V1, V2 } version;
|
||||||
union {
|
union {
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4996)
|
||||||
|
#endif // __GNUG__
|
||||||
|
CustomPrefixCallback callback_v1;
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif // __GNUG__
|
||||||
PrefixFormatterCallback callback_v2;
|
PrefixFormatterCallback callback_v2;
|
||||||
};
|
};
|
||||||
// User-provided data to pass to the callback:
|
// User-provided data to pass to the callback:
|
||||||
@ -995,22 +1063,7 @@ bool LogFileObject::CreateLogfile(const string& time_pid_string) {
|
|||||||
if (FLAGS_timestamp_in_logfile_name) {
|
if (FLAGS_timestamp_in_logfile_name) {
|
||||||
// demand that the file is unique for our timestamp (fail if it exists).
|
// demand that the file is unique for our timestamp (fail if it exists).
|
||||||
flags = flags | O_EXCL;
|
flags = flags | O_EXCL;
|
||||||
} else {
|
|
||||||
// logs are written to a single file, where: a log file is created for the
|
|
||||||
// the first time or a file is being recreated due to exceeding max size
|
|
||||||
|
|
||||||
struct stat statbuf;
|
|
||||||
if (stat(filename, &statbuf) == 0) {
|
|
||||||
// truncate the file if it exceeds the max size
|
|
||||||
if ((static_cast<uint32>(statbuf.st_size) >> 20U) >= MaxLogSize()) {
|
|
||||||
flags |= O_TRUNC;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// update file length to sync file size
|
|
||||||
file_length_ = static_cast<uint32>(statbuf.st_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FileDescriptor fd{
|
FileDescriptor fd{
|
||||||
open(filename, flags, static_cast<mode_t>(FLAGS_logfile_mode))};
|
open(filename, flags, static_cast<mode_t>(FLAGS_logfile_mode))};
|
||||||
if (!fd) return false;
|
if (!fd) return false;
|
||||||
@ -2028,6 +2081,38 @@ void SetLogSymlink(LogSeverity severity, const char* symlink_basename) {
|
|||||||
|
|
||||||
LogSink::~LogSink() = default;
|
LogSink::~LogSink() = default;
|
||||||
|
|
||||||
|
void LogSink::send(LogSeverity severity, const char* full_filename,
|
||||||
|
const char* base_filename, int line,
|
||||||
|
const LogMessageTime& time, const char* message,
|
||||||
|
size_t message_len) {
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4996)
|
||||||
|
#endif // __GNUG__
|
||||||
|
send(severity, full_filename, base_filename, line, &time.tm(), message,
|
||||||
|
message_len);
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif // __GNUG__
|
||||||
|
}
|
||||||
|
|
||||||
|
void LogSink::send(LogSeverity severity, const char* full_filename,
|
||||||
|
const char* base_filename, int line, const std::tm* t,
|
||||||
|
const char* message, size_t message_len) {
|
||||||
|
(void)severity;
|
||||||
|
(void)full_filename;
|
||||||
|
(void)base_filename;
|
||||||
|
(void)line;
|
||||||
|
(void)t;
|
||||||
|
(void)message;
|
||||||
|
(void)message_len;
|
||||||
|
}
|
||||||
|
|
||||||
void LogSink::WaitTillSent() {
|
void LogSink::WaitTillSent() {
|
||||||
// noop default
|
// noop default
|
||||||
}
|
}
|
||||||
@ -2617,6 +2702,29 @@ void MakeCheckOpValueString(std::ostream* os, const std::nullptr_t& /*v*/) {
|
|||||||
|
|
||||||
void InitGoogleLogging(const char* argv0) { InitGoogleLoggingUtilities(argv0); }
|
void InitGoogleLogging(const char* argv0) { InitGoogleLoggingUtilities(argv0); }
|
||||||
|
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4996)
|
||||||
|
#endif // __GNUG__
|
||||||
|
void InitGoogleLogging(const char* argv0, CustomPrefixCallback prefix_callback,
|
||||||
|
void* prefix_callback_data) {
|
||||||
|
if (prefix_callback != nullptr) {
|
||||||
|
g_prefix_formatter = std::make_unique<PrefixFormatter>(
|
||||||
|
prefix_callback, prefix_callback_data);
|
||||||
|
} else {
|
||||||
|
g_prefix_formatter = nullptr;
|
||||||
|
}
|
||||||
|
InitGoogleLogging(argv0);
|
||||||
|
}
|
||||||
|
#if defined(__GNUG__)
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif // __GNUG__
|
||||||
|
|
||||||
void InstallPrefixFormatter(PrefixFormatterCallback callback, void* data) {
|
void InstallPrefixFormatter(PrefixFormatterCallback callback, void* data) {
|
||||||
if (callback != nullptr) {
|
if (callback != nullptr) {
|
||||||
g_prefix_formatter = std::make_unique<PrefixFormatter>(callback, data);
|
g_prefix_formatter = std::make_unique<PrefixFormatter>(callback, data);
|
||||||
|
|||||||
@ -110,7 +110,6 @@ static void TestLogSinkWaitTillSent();
|
|||||||
static void TestCHECK();
|
static void TestCHECK();
|
||||||
static void TestDCHECK();
|
static void TestDCHECK();
|
||||||
static void TestSTREQ();
|
static void TestSTREQ();
|
||||||
static void TestMaxLogSizeWhenNoTimestamp();
|
|
||||||
static void TestBasename();
|
static void TestBasename();
|
||||||
static void TestBasenameAppendWhenNoTimestamp();
|
static void TestBasenameAppendWhenNoTimestamp();
|
||||||
static void TestTwoProcessesWrite();
|
static void TestTwoProcessesWrite();
|
||||||
@ -289,7 +288,6 @@ int main(int argc, char** argv) {
|
|||||||
MungeAndDiffTestStdout(FLAGS_test_srcdir + "/src/logging_unittest.out"));
|
MungeAndDiffTestStdout(FLAGS_test_srcdir + "/src/logging_unittest.out"));
|
||||||
FLAGS_logtostdout = false;
|
FLAGS_logtostdout = false;
|
||||||
|
|
||||||
TestMaxLogSizeWhenNoTimestamp();
|
|
||||||
TestBasename();
|
TestBasename();
|
||||||
TestBasenameAppendWhenNoTimestamp();
|
TestBasenameAppendWhenNoTimestamp();
|
||||||
TestTwoProcessesWrite();
|
TestTwoProcessesWrite();
|
||||||
@ -808,47 +806,6 @@ static void CheckFile(const string& name, const string& expected_string,
|
|||||||
<< expected_string << " in " << files[0];
|
<< expected_string << " in " << files[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TestMaxLogSizeWhenNoTimestamp() {
|
|
||||||
fprintf(stderr, "==== Test setting max log size without timestamp\n");
|
|
||||||
const string dest = FLAGS_test_tmpdir + "/logging_test_max_log_size";
|
|
||||||
DeleteFiles(dest + "*");
|
|
||||||
|
|
||||||
auto original_max_log_size = FLAGS_max_log_size;
|
|
||||||
auto original_timestamp_in_logfile_name = FLAGS_timestamp_in_logfile_name;
|
|
||||||
|
|
||||||
FLAGS_max_log_size = 1; // Set max log size to 1MB
|
|
||||||
FLAGS_timestamp_in_logfile_name = false;
|
|
||||||
|
|
||||||
// Set log destination
|
|
||||||
SetLogDestination(GLOG_INFO, dest.c_str());
|
|
||||||
|
|
||||||
// 1e4 info logs -> is about 772 KB in size
|
|
||||||
// 2e4 info logs -> is around 1500 KB in size -> 1.5MB
|
|
||||||
// If our max_log_size constraint is respected, it will truncate earlier logs
|
|
||||||
// and the file size will be lesser than 1MB (around 0.5MB)
|
|
||||||
const int num_logs = 2e4;
|
|
||||||
for (int i = 0; i < num_logs; i++) {
|
|
||||||
LOG(INFO) << "Hello world";
|
|
||||||
}
|
|
||||||
FlushLogFiles(GLOG_INFO);
|
|
||||||
|
|
||||||
// Check log file size
|
|
||||||
struct stat statbuf;
|
|
||||||
stat(dest.c_str(), &statbuf);
|
|
||||||
|
|
||||||
// Verify file size is less than the max log size limit
|
|
||||||
CHECK_LT(static_cast<unsigned int>(statbuf.st_size),
|
|
||||||
FLAGS_max_log_size << 20U);
|
|
||||||
|
|
||||||
// Reset flag values to their original values
|
|
||||||
FLAGS_max_log_size = original_max_log_size;
|
|
||||||
FLAGS_timestamp_in_logfile_name = original_timestamp_in_logfile_name;
|
|
||||||
|
|
||||||
// Release file handle for the destination file to unlock the file in Windows.
|
|
||||||
LogToStderr();
|
|
||||||
DeleteFiles(dest + "*");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TestBasename() {
|
static void TestBasename() {
|
||||||
fprintf(stderr, "==== Test setting log file basename\n");
|
fprintf(stderr, "==== Test setting log file basename\n");
|
||||||
const string dest = FLAGS_test_tmpdir + "/logging_test_basename";
|
const string dest = FLAGS_test_tmpdir + "/logging_test_basename";
|
||||||
|
|||||||
@ -55,10 +55,6 @@
|
|||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#if defined(HAVE_SYS_SYSCALL_H) && defined(HAVE_SYS_TYPES_H)
|
|
||||||
# include <sys/syscall.h>
|
|
||||||
# include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace google {
|
namespace google {
|
||||||
|
|
||||||
@ -220,14 +216,8 @@ void DumpSignalInfo(int signal_number, siginfo_t* siginfo) {
|
|||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << std::showbase << std::hex << std::this_thread::get_id();
|
oss << std::showbase << std::hex << std::this_thread::get_id();
|
||||||
formatter.AppendString(oss.str().c_str());
|
formatter.AppendString(oss.str().c_str());
|
||||||
# if defined(GLOG_OS_LINUX) && defined(HAVE_SYS_SYSCALL_H) && \
|
|
||||||
defined(HAVE_SYS_TYPES_H)
|
|
||||||
pid_t tid = syscall(SYS_gettid);
|
|
||||||
formatter.AppendString(" LWP ");
|
|
||||||
formatter.AppendUint64(static_cast<uint64>(tid), 10);
|
|
||||||
# endif
|
|
||||||
formatter.AppendString(") ");
|
|
||||||
|
|
||||||
|
formatter.AppendString(") ");
|
||||||
// Only linux has the PID of the signal sender in si_pid.
|
// Only linux has the PID of the signal sender in si_pid.
|
||||||
# ifdef GLOG_OS_LINUX
|
# ifdef GLOG_OS_LINUX
|
||||||
formatter.AppendString("from PID ");
|
formatter.AppendString("from PID ");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user