package elements
// Fluentd including some plugins treats logs as a BINARY by default to forward.
// But sometimes storage can't proceed some chars, eg ElasticSearch.
// Plugin record_modifier can help resolve such problem.
// In char_encoding from:to case, it replaces invalid character with safe character.
//
// @type record_modifier
// # will check is symbols valid 'utf-8', if not replace to the valid one
// # e.g. japanese 'こんにちは' and ukrainian 'привіт' are valid 'utf-8' string, so will be store without modification
// # but BINARY will be replaced with '?'
// char_encoding utf-8:utf-8
//
// */
const DefaultCharEncoding = "utf-8:utf-8"
const CharEncoding = "charEncoding"
type RecordModifier struct {
Records []Record
RemoveKeys []string
CharEncoding string
}
func (rm RecordModifier) Name() string {
return "recordModifierTemplate"
}
func (rm RecordModifier) Template() string {
return `{{define "` + rm.Name() + `" -}}
@type record_modifier
{{if .CharEncoding -}}
char_encoding {{.CharEncoding}}
{{end -}}
{{if .Records -}}
{{- range $Index, $Record := .Records}}
{{$Record.Key}} {{$Record.Expression}}
{{- end}}
{{end -}}
{{if .RemoveKeys -}}
remove_keys {{comma_separated .RemoveKeys}}
{{end -}}
{{end}}
`
}