LayoutDbi {lgrExtra} | R Documentation |
Format log events for output to databases
Description
LayoutDbi can contain col_types
that AppenderDbi can use to create new
database tables; however, it is safer and more flexible to set up the log
table up manually with an SQL CREATE TABLE
statement instead.
Details
The LayoutDbi parameters fmt
, timestamp_fmt
, colors
and pad_levels
are only applied for for console output via the $show()
method and do not
influence database inserts in any way. The inserts are pre-processed by
the methods $format_data()
, $format_colnames
and $format_tablenames
.
It does not format
LogEvents directly, but their data.table
representations (see
as.data.table.LogEvent), as well as column- and table names.
Value
The $new()
method returns an R6::R6 that inherits from
lgr::Layout and can used as a Layout by an lgr::Appender.
Database Specific Layouts
Different databases have different data types and features. Currently the
following LayoutDbi
subclasses exist that deal with specific databases,
but this list is expected to grow as lgrExtra matures:
-
LayoutSqlite
: For SQLite databases -
LayoutPostgres
: for Postgres databases -
LayoutMySql
: for MySQL databases -
LayoutDb2
: for DB2 databases
The utility function select_dbi_layout()
tries returns the appropriate
Layout for a DBI connection, but this does not work for odbc and JDBC
connections where you have to specify the layout manually.
For creating custom DB-specific layouts it should usually be enough to create
an R6::R6 class that inherits from LayoutDbi
and choosing different
defaults for $format_table_name
, $format_colnames
and $format_data
.
Super classes
lgr::Layout
-> lgr::LayoutFormat
-> LayoutDbi
Public fields
format_table_name
a
function
to format the table name before inserting to the database. The function will be applied to the$table_name
before inserting into the database. For example some, databases prefer all lowercase names, some uppercase. SQL updates should be case-agnostic, but sadly in practice not all DBI backends behave consistently in this regard.format_colnames
a
function
to format the column names before inserting to the database. The function will be applied to the column names of the data frame to be inserted into the database.format_data
a
function
to format the data before inserting into the database. The function will be applied to the whole data frame.names
of the columns that contain data that has been serialized to JSON strings
Active bindings
col_types
a named
character
vector of column types supported by the target database. If notNULL
this is used by AppenderDbi or similar Appenders to create a new database table on instantiation of the Appender. If the target database table already exists,col_types
is not used.names
of the columns that contain data that has been serialized to JSON strings
col_names
column names of the target table (the same as
names(lo$col_types)
)
Methods
Public methods
Inherited methods
Method new()
Usage
LayoutDbi$new( col_types = c(level = "integer", timestamp = "timestamp", logger = "varchar(256)", caller = "varchar(256)", msg = "varchar(2048)"), serialized_cols = NULL, fmt = "%L [%t] %m %f", timestamp_fmt = "%Y-%m-%d %H:%M:%S", colors = getOption("lgr.colors", list()), pad_levels = "right", format_table_name = identity, format_colnames = identity, format_data = data.table::as.data.table )
Method set_col_types()
Usage
LayoutDbi$set_col_types(x)
Method set_serialized_cols()
Usage
LayoutDbi$set_serialized_cols(x)
Method sql_create_table()
Usage
LayoutDbi$sql_create_table(table)
Method toString()
Usage
LayoutDbi$toString()
Method clone()
The objects of this class are cloneable with this method.
Usage
LayoutDbi$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
select_dbi_layout()
, DBI::DBI,
Other Layout:
LayoutElasticSearch