A sink is an object that lets you to specify a set of log entries to export to a particular destination. Cloud Logging lets you export log entries to destinations including Cloud Storage buckets (for long term log storage), Google BigQuery datasets (for log analysis), Google Pub/Sub (for streaming to other applications).
Package
@google-cloud/loggingExample
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
const
logging
=
new
Logging
();
const
sink
=
logging
.
sink
(
'my-sink'
);
Constructors
(constructor)(logging, name)
constructor
(
logging
:
Logging
,
name
:
string
);
Constructs a new instance of the Sink
class
logging
Logging
name
string
Properties
formattedName_
formattedName_
:
string
;
logging
logging
:
Logging
;
metadata
metadata
?:
LogSink
;
name
name
:
string
;
Methods
create(config)
create
(
config
:
CreateSinkRequest
)
:
Promise
< [
Sink
,
LogSink
]>;
Create a sink.
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
const
logging
=
new
Logging
();
const
sink
=
logging
.
sink
(
'my-sink'
);
const
config
=
{
destination
:
{
// ...
}
};
sink
.
create
(
config
,
(
err
,
sink
,
apiResponse
)
=
>
{
if
(
!
err
)
{
// The sink was created successfully.
}
});
//-
// If the callback is omitted, we'll return a Promise.
//-
sink
.
create
(
config
).
then
(
data
=
>
{
const
sink
=
data
[
0
];
const
apiResponse
=
data
[
1
];
});
Another example:
// Imports the Google Cloud client libraries
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
const
{
Storage
}
=
require
(
' @google-cloud/storage
'
);
// Creates clients
const
logging
=
new
Logging
();
const
storage
=
new
Storage
();
/**
* TODO(developer): Uncomment the following lines to run the code.
*/
// const sinkName = 'Name of your sink, e.g. my-sink';
// const bucketName = 'Desination bucket, e.g. my-bucket';
// const filter = 'Optional log filer, e.g. severity=ERROR';
// The destination can be a Cloud Storage bucket, a Cloud Pub/Sub topic,
// or a BigQuery dataset. In this case, it is a Cloud Storage Bucket.
// See https://cloud.google.com/logging/docs/api/tasks/exporting-logs for
// information on the destination format.
const
destination
=
storage
.
bucket
(
bucketName
);
const
sink
=
logging
.
sink
(
sinkName
);
/**
* The filter determines which logs this sink matches and will be exported
* to the destination. For example a filter of 'severity>=INFO' will send
* all logs that have a severity of INFO or greater to the destination.
* See https://cloud.google.com/logging/docs/view/advanced_filters for more
* filter information.
*/
const
config
=
{
destination
:
destination
,
filter
:
filter
,
};
async
function
createSink
()
{
// See https://googleapis.dev/nodejs/logging/latest/Sink.html#create
await
sink
.
create
(
config
);
console
.
log
(
`Created sink
${
sinkName
}
to
${
bucketName
}
`
);
}
createSink
();
create(config, callback)
create
(
config
:
CreateSinkRequest
,
callback
:
CreateSinkCallback
)
:
void
;
void
delete(gaxOptions)
delete
(
gaxOptions
?:
CallOptions
)
:
Promise<DeleteResponse>
;
Delete the sink.
gaxOptions
CallOptions
Request configuration options, outlined here: https://googleapis.github.io/gax-nodejs/global.html#CallOptions.
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
const
logging
=
new
Logging
();
const
sink
=
logging
.
sink
(
'my-sink'
);
sink
.
delete
((
err
,
apiResponse
)
=
>
{
if
(
!
err
)
{
// The log was deleted.
}
});
//-
// If the callback is omitted, we'll return a Promise.
//-
sink
.
delete
().
then
(
data
=
>
{
const
apiResponse
=
data
[
0
];
});
Another example:
// Imports the Google Cloud client library
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
// Creates a client
const
logging
=
new
Logging
();
/**
* TODO(developer): Uncomment the following line to run the code.
*/
// const sinkName = 'Name of sink to delete, e.g. my-sink';
const
sink
=
logging
.
sink
(
sinkName
);
async
function
deleteSink
()
{
// See https://googleapis.dev/nodejs/logging/latest/Sink.html#delete
await
sink
.
delete
();
console
.
log
(
`Sink
${
sinkName
}
deleted.`
);
}
deleteSink
();
delete(callback)
delete
(
callback
:
DeleteCallback
)
:
void
;
void
delete(gaxOptions, callback)
delete
(
gaxOptions
:
CallOptions
,
callback
:
DeleteCallback
)
:
void
;
void
getMetadata(gaxOptions)
getMetadata
(
gaxOptions
?:
CallOptions
)
:
Promise<SinkMetadataResponse>
;
Get the sink's metadata.
gaxOptions
CallOptions
Request configuration options, outlined here: https://googleapis.github.io/gax-nodejs/global.html#CallOptions.
Promise
< SinkMetadataResponse
>
{Promise
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
const
logging
=
new
Logging
();
const
sink
=
logging
.
sink
(
'my-sink'
);
sink
.
getMetadata
((
err
,
metadata
,
apiResponse
)
=
>
{});
//-
// If the callback is omitted, we'll return a Promise.
//-
sink
.
getMetadata
().
then
(
data
=
>
{
const
metadata
=
data
[
0
];
});
Another example:
// Imports the Google Cloud client library
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
// Creates a client
const
logging
=
new
Logging
();
/**
* TODO(developer): Uncomment the following line to run the code.
*/
// const sinkName = 'Name of your sink, e.g. my-sink';
const
sink
=
logging
.
sink
(
sinkName
);
async
function
printSinkMetadata
()
{
// See https://googleapis.dev/nodejs/logging/latest/Sink.html#getMetadata
const
[
metadata
]
=
await
sink
.
getMetadata
();
console
.
log
(
`Name:
${
metadata
.
name
}
`
);
console
.
log
(
`Destination:
${
metadata
.
destination
}
`
);
console
.
log
(
`Filter:
${
metadata
.
filter
}
`
);
}
printSinkMetadata
();
getMetadata(callback)
getMetadata
(
callback
:
SinkMetadataCallback
)
:
void
;
callback
SinkMetadataCallback
void
getMetadata(gaxOptions, callback)
getMetadata
(
gaxOptions
:
CallOptions
,
callback
:
SinkMetadataCallback
)
:
void
;
gaxOptions
CallOptions
callback
SinkMetadataCallback
void
setFilter(filter)
setFilter
(
filter
:
string
)
:
Promise<SinkMetadataResponse>
;
Set the sink's filter.
This will override any filter that was previously set.
filter
string
The new filter.
Promise
< SinkMetadataResponse
>
{Promise
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
const
logging
=
new
Logging
();
const
sink
=
logging
.
sink
(
'my-sink'
);
const
filter
=
'metadata.severity = ALERT'
;
sink
.
setFilter
(
filter
,
(
err
,
apiResponse
)
=
>
{});
//-
// If the callback is omitted, we'll return a Promise.
//-
sink
.
setFilter
(
filter
).
then
(
data
=
>
{
const
apiResponse
=
data
[
0
];
});
setFilter(filter, callback)
setFilter
(
filter
:
string
,
callback
:
SinkMetadataCallback
)
:
void
;
filter
string
callback
SinkMetadataCallback
void
setMetadata(metadata)
setMetadata
(
metadata
:
SetSinkMetadata
)
:
Promise<SinkMetadataResponse>
;
Set the sink's metadata.
Note: If the sink was previously created or updated with uniqueWriterIdentity = true, then you must update the sink by setting uniqueWriterIdentity = true. Read more about using a unique writer identity here: https://cloud.google.com/logging/docs/api/tasks/exporting-logs#using_a_unique_writer_identity
See Sink Resource See projects.sink.update API Documentation
metadata
SetSinkMetadata
See a [Sink resource](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.sinks#LogSink).
Promise
< SinkMetadataResponse
>
{Promise
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
const
logging
=
new
Logging
();
const
sink
=
logging
.
sink
(
'my-sink'
);
const
metadata
=
{
filter
:
'metadata.severity = ALERT'
};
sink
.
setMetadata
(
metadata
,
(
err
,
apiResponse
)
=
>
{});
//-
// If the callback is omitted, we'll return a Promise.
//-
sink
.
setMetadata
(
metadata
).
then
(
data
=
>
{
const
apiResponse
=
data
[
0
];
});
Another example:
// Imports the Google Cloud client library
const
{
Logging
}
=
require
(
' @google-cloud/logging
'
);
// Creates a client
const
logging
=
new
Logging
();
/**
* TODO(developer): Uncomment the following lines to run the code.
*/
// const sinkName = 'Name of sink to update, e.g. my-sink';
// const filter = 'New filter for the sink, e.g. severity >= WARNING';
const
sink
=
logging
.
sink
(
sinkName
);
/**
* The filter determines which logs this sink matches and will be exported
* to the destination. For example a filter of 'severity>=INFO' will send
* all logs that have a severity of INFO or greater to the destination.
* See https://cloud.google.com/logging/docs/view/advanced_filters for more
* filter information.
*/
const
metadataInfo
=
{
filter
:
filter
,
};
async
function
updateSink
()
{
// See https://googleapis.dev/nodejs/logging/latest/Sink.html#setMetadata
const
[
metadata
]
=
await
sink
.
setMetadata
(
metadataInfo
);
console
.
log
(
`Sink
${
sinkName
}
updated.`
,
metadata
);
}
updateSink
();
setMetadata(metadata, callback)
setMetadata
(
metadata
:
SetSinkMetadata
,
callback
:
SinkMetadataCallback
)
:
void
;
metadata
SetSinkMetadata
callback
SinkMetadataCallback
void